1P by GN⁺ | ★ favorite | 댓글 1개
  • Oral-B iOS 앱 290MB 중 233MB가 asset catalog에서 나오며, 앱 크기의 대부분을 여러 칫솔 모델용 PDF 자산이 차지함
  • 가장 큰 Oral-B 자산은 Sonos_M9_rose 7.8MB이고, 다수 PDF는 칫솔 전체가 아니라 손잡이와 버튼만 담고 있음
  • Comino.bundle에는 20class_seqlen26_6p5h_20200302-095627_comino_android_production 같은 파일이 들어 있어 모델 가중치로 보임
  • Colgate Smile 앱은 378MB로 더 크며, Unity 프레임워크 125MB와 제거되지 않은 바이너리 심볼이 주요 비대화 요인임
  • Colgate는 메인 번들과 위젯 확장에 자산·지역화 파일 60MB를 중복 포함해, 최소 120MB가 기능적 가치 없이 앱 크기를 키움

Oral-B 앱 크기의 대부분은 PDF 자산

  • Oral-B 앱은 총 290MB 중 233MB가 asset catalog에서 발생함
    • 전체 크기의 80% 에 해당함
    • 대부분은 서로 다른 칫솔 모델을 나타내는 PDF 자산임
  • 가장 큰 PDF 자산은 Sonos_M9_rose7.8MB
  • 여러 PDF는 칫솔 전체 이미지가 아니라 손잡이와 버튼만 포함함
  • 눈에 띄는 다른 항목은 15MB Comino.bundle
    • 20class_seqlen26_6p5h_20200302-095627_comino_android_production 같은 파일을 포함함
    • 해당 파일들은 일종의 모델 가중치로 보임

Colgate Smile의 더 큰 문제는 줄일 수 있는 비대화

  • Colgate Smile 앱 크기는 378MB
  • 앱은 “guided brushing” 기능 때문에 Unity를 쓰는 것으로 보임
    • Unity 프레임워크는 125MB
    • 해당 기능에 가치가 있다면 Unity 사용 자체는 납득 가능한 선택으로 볼 수 있음
  • 더 큰 낭비는 프로덕션 앱에서 바이너리 심볼을 제거하지 않은 점
    • 바이너리 심볼은 심볼리케이션에 사용됨
    • DSYM을 크래시 리포터에 업로드한다면 프로덕션 앱 안에 포함할 필요가 없음
    • 바이너리 심볼 제거만으로 총 약 60MB, 15% 를 줄일 수 있음
  • 또 다른 비대화 요인은 중복 포함
    • Colgate는 메인 번들과 위젯 확장에 자산과 지역화 파일 60MB를 중복 포함함
    • 빨간색 노드가 중복 항목으로 표시됨
  • Colgate 앱에서는 최소 120MB가 사용자에게 아무 기능적 가치를 제공하지 않는 크기로 계산됨
  • 관련 글:

댓글과 토론

Hacker News 의견들
  • Oral-B 앱과 Colgate 앱이 애초에 왜 존재하는지 모르겠음

    • 고객에게 마케팅과 광고를 하려고 데이터를 수집하려는 것임
    • 앱이 어느 치아를 제대로 닦았는지, 즉 충분한 시간을 썼는지와 어느 치아를 빼먹었거나 너무 빨리 지나갔는지 알려줄 수 있음
      개인적으로는 한 번 써보고 지웠지만, 양치가 효율적인지 확인하려는 사람들에게는 쓸모가 있을 수 있음. 어쨌든 완전히 선택 사항이고, 앱 존재를 무시하고 칫솔만 써도 됨
    • 이제 AI 탑재 칫솔까지 나오는 이유와 같음. 매년 칫솔을 계속 새로 발명하는 경쟁을 하면서 새로운 차별점, 새로운 마케팅 각도, 높은 판매량을 만들려는 것임
    • 콜라나 McDonald’s 광고와 비슷함. 새 정보를 주는 게 아니라 로고, 브랜드, 이름을 계속 시청자나 사용자 머릿속에 넣는 것임
      그러면 다른 “모르는” 브랜드보다 더 친숙하게 느껴지고 그 브랜드를 살 가능성이 커짐. 앱도 마찬가지로, 쓸 때마다 로고와 브랜드를 눈앞에 들이댐. 결론적으로 데이터를 팔 필요조차 없음
    • 자동차 보험사가 데이터 기록 장치나 앱을 쓰면 안전 운전 할인을 주듯, 건강보험사가 “양치 잘하는 사람” 할인을 아직 시작하지 않은 게 의외임
  • 슬픈 현실은 App Store > Your Account에서 새로고침해 보면 100MB 미만 앱이 손에 꼽힌다는 것임. 내 경우 대부분 앱이 300MB이고, 이것도 업데이트만 놓고 하는 얘기임
    Android와 비교해 보니 거기서는 앱들이 훨씬 가벼움. 예전 Objective-C 앱은 훨씬 날씬했는데, Swift 앱은 ABI가 생긴 뒤에도 크고 무거운 편임. 개발자 게으름도 일부 있고, Apple 도구가 별로인 것도 일부 원인임. 컴파일된 CocoaPods나 Swift 패키지에서 트리 쉐이킹이나 죽은 코드 제거가 없음. Apple은 별로 신경 안 쓰고, 더 큰 저장공간의 새 기기나 iCloud 구독을 파는 걸 오히려 반길 듯함

    • Google에서 이 일을 했었음. 현대적인 Android 앱 배포 형식은 사용자가 어느 시점이든 필요한 최소한만 내려받고 설치하도록 앱을 잘게 나누는 데 완전히 맞춰 설계됨
      리소스, 아키텍처, 언어는 필요할 때만 내려받고, 게임 에셋 텍스처 압축 형식 같은 영역별 요소까지 더 들어감. 그래서 기기는 필요한 텍스처만 받고, 개발자는 여러 형식으로 배포해 사용자가 자기 기기가 지원하는 최선의 옵션을 받게 할 수 있음. 주문형 코드 모듈 다운로드와 설치도 가능함. 예를 들어 가입 절차를 별도 모듈로 빼서 처음에 설치하고, 사용자가 가입한 뒤에는 제거해 설치 크기를 줄일 수 있음. 어떤 개발자는 고객 지원용 수 MB짜리 VOIP 모듈을 지원 화면을 열 때까지 실제로 내려받거나 설치하지 않아서, 대부분 사용자는 아예 설치하지 않게 됨
      [0]: https://developer.android.com/guide/playcore/asset-delivery/...
    • Apple에도 그런 도구가 있음. 동적 라이브러리에도 적용할 수 있는 새 도구를 추가했음
  • https://xcancel.com/emergetools/status/1828490449881047401

    • 지금까지 본 Twitter 프록시 중 최악임. “이 페이지를 보려면 x초 기다리라”는 멍청한 화면이 나오고 그다음엔 “페이지를 다시 불러오라”고 함
      불법 스트리밍 보려고 할 때 나오는 스팸 중간 페이지 같음. 거기와 관계없는 사람이 이걸 올렸다는 게 믿기지 않을 정도로 끔찍한 도구
  • 데이터 브로커용 사용자 데이터 수집이 너무 가치 있는 사업이 됐다는 게 짜증남. 대기업들이 좋은 제품 대신 데이터를 뽑아내는 앱을 계속 만들며 숫자가 올라가는 걸 보고 기뻐할 수는 없음
    “옛날이 좋았다”는 투덜거림을 하게 된 걸 보니 공식적으로 중년을 넘긴 것 같지만, 냉장고, 식기세척기, 칫솔에 앱이라니. 식기세척기가 스스로 그릇을 넣는 날이 오면 그때쯤 쾌락적 물가 조정은 받아들이겠음

    • 데이터를 빨아들이는 효율만큼 광고 품질도 올라가면 좋겠음. 운전면허도 없고 연애 중인데, 내 기기의 개인화 광고 상당수가 데이트 사이트와 자동차 대리점 광고임
  • 결국 서로 다른 모델 이미지를 PDF로 멍청하게 크게 넣어둔 것뿐인가? 예상과 다름. 뒤에서 나온 Colgate 앱 같은 쪽일 줄 알았음

    • 말도 안 됨. 그런 건 100% 필요할 때 받아와야
    • 웹브라우저의 “PDF로 인쇄” 기능으로 PDF를 만든 건지 궁금함. Chrome이 만드는 PDF는 용량이 엄청 큼
    • Unreal Engine을 썼을 줄 알았음. 마지막으로 확인했을 때 최소 앱도 200MB가 넘었음
  • Oral-B 앱은 몇 년 전엔 꽤 가벼웠고, 최신 세계 뉴스 피드를 보여주고, Apple Health에 데이터를 기록하고, 연속 양치를 장려해서 재미있었음
    그런데 앱 전체를 다시 쓰면서 거의 모든 기능을 잃었고, 업그레이드 후 첫 실행 이후 한 번도 열지 않았음. TestFlight처럼 예전 버전을 설치할 수 있는 iOS App Store가 있으면 좋겠음. 아쉽게도 TestFlight도 최대 90일뿐임. 이제 BLE 스니퍼를 꺼낼 때일지도 모르지만, 일회성 무허가 임시 앱에 HealthKit 권한을 받는 건 불가능할 듯함

    • “최신 세계 뉴스 피드”라니, 뭐라고? Oral-B? 세계 뉴스 피드?
    • 프로토콜은 이미 역공학됨. Home Assistant와 Bluetooth를 쓰고 있는데, 이웃의 Oral-B 칫솔 하나가 잡힘
    • 그 버전 작업에 참여했었음. 이 뒤 논의에서는 조용히 있겠음
  • 크기 자체보다 더 창피한 건, 칫솔의 모드를 바꾸는 데 앱이 필요하다는 점임. 정말 허용되면 안 된다고 보지만, 어떻게 강제해야 할지는 잘 모르겠음

    • 어떤 모델을 쓰고 어떤 모드를 바꾸려는지에 따라 다르겠지만, Oral-B Pro 5000에서는 앱 없이도 “Daily Clean”, “Sensitive” 같은 청소 모드와 끝부분 LED 색을 바꿀 수 있었음
      디스플레이는 양치 시간 타이머를 보여주고, 칫솔에서 필요한 추적은 그 정도면 충분함. 버튼으로 접근할 수 없는 다른 모드가 있을 수는 있지만, 내가 아는 건 없음
    • 첫 번째 과제는 설계상 결함이 있는 제품을 시장에서 퇴출할 법적 권한을 가진 소비자 보호 기관을 두는 것임
      두 번째 과제는 무엇을 허용하고 금지할지 정확히 정의하는 것인데, 기업이 고객을 괴롭히려고 상상할 수 있는 멍청한 짓이 너무 많으니, 좋은 핵심 원칙에 기반해 평가하고 결정한다면 그런 기관에 꽤 넓은 재량을 줘도 된다고 봄. 예를 들면 “동반 앱 없이 구현 가능한 기능은 동반 앱을 요구해서는 안 된다” 같은 원칙임
    • 왜 이런 데까지 입법이 필요함? 그냥 그 칫솔을 사지 말고 제품이 자연스럽게 죽게 두면 됨
    • 내 IO에서는 칫솔에서 모드를 바꿀 수 있지만, 바꿀 모드 목록 선택은 앱에서 함. 다만 기본값이 “전부”인 것 같아서 앱을 한 번도 실행하지 않아도 여전히 쓸 수 있음
  • 진짜 질문은 애초에 왜 칫솔에 앱이 필요하냐는 것임

    • 고객 데이터를 최대한 많이 모아서, 익명화하길 바라며 묶은 뒤 데이터 브로커에게 팔고 고객층에서 돈을 더 뽑아내려는 것임
      이 모든 게 “동의” 아래 이뤄짐. 앱을 설치했고 서비스 약관이나 개인정보 처리방침을 받아들였을 가능성이 높기 때문임. 제품과 상호작용한 시간이나 빈도를 세거나 사용하라고 알려주는 서비스라는 명목도 붙음. 정상적으로 사는 성인이라면 이미 하던 일이고, 다만 덜 정확했을 뿐일 텐데도
    • 가상의 예로, “치과용” 껌 회사들은 사람들의 양치 습관을 인구통계와 지리 데이터와 교차한 정보에 큰돈을 낼 수 있음
      특정 도시나 카운티에서 사람들이 일반 인구보다 이를 25~50% 덜 닦는다는 데이터가 나오면, 그 지역의 광고비를 늘리는 게 꽤 그럴듯함. 이를 잘 안 닦는 사람들이 손상을 상쇄하려고 치과용 껌을 살 가능성이 더 높다고 볼 수 있기 때문임
    • 각 치아의 앞면, 윗면, 뒷면에 충분한 시간을 썼는지 보여줌. 전동 칫솔은 수동 칫솔과 다르게 쓰며, 앞뒤로 움직이는 방식이 아님
    • 솔직히 나도 같은 생각이었음. 양치 통계나 치아별 시간 같은 건가 싶음
    • 내가 앱을 써본 한 가지 이유는 아이들 때문임. 양치하는 동안 애니메이션을 틀어주고, 통계를 유지하며, 보상으로 아바타 색 같은 걸 고르게 해줌
  • 펼친 버전: https://unrollnow.com/status/1828490449881047401

    • 나한테는 작동하지 않음

      Connection failed: User 'u327838624_unroll' has exceeded the 'max_connections_per_hour' resource (current value: 500)

    • HN 트래픽에 맞아 죽은 것 같음

      Connection failed: User 'uxxxxxxx_unroll' has exceeded the 'max_connections_per_hour' resource (current value: 500)
      이거 MySQL 오류인가?

  • 제정신인 사람이 어떤 이유로 칫솔 앱을 내려받는 거임?

    • 칫솔 펌웨어는 그럼 어떻게 업데이트함? 농담이면 좋겠지만, Phillips는 Sonicare용 펌웨어 업데이트를 1년에 몇 번씩 내는 것 같음