본문 바로가기
C.W.K.
Lesson 05 of 05 · published

유니버설 앱 하나

~11 min · universal, iphone, ipad, lease, size-class

Level 0불씨
0 XP0/48 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

유리 둘, 계약 하나

아이폰과 아이패드의 Smolder 는 유니버설 앱 하나지, 계약 둘인 제품 둘이 아니야. 같은 게이트웨이들, 같은 기기 권한, 같은 데몬 정체성, 크롬의 같은 잔불. 사이즈 클래스는 세션을 몇 개 볼 수 있는지를 바꾸지, 거기서 뭘 해도 되는지를 바꾸지 않아. 아이폰은 세션 하나에 포커스해. 아이패드는 둘을 보여 줄 수 있어. 앱이 둘이면 입력 계약을 틀릴 곳도 둘, TestFlight 배포 흐름도 둘, 핀도 둘이야. 행업이 한쪽 유리에선 살해가 되고 다른 쪽에선 분리가 될 여지까지 생겨.

여기서 유니버설은 마케팅 단어가 아니야. 아이패드가 "진짜 주머니 터미널"이 되고 아이폰이 더 느슨한 뇌의 뷰어가 되는 걸 거절하는 거야. 일하는 계약은 양쪽 다 호스트 일 이어가기야. 호스트 세션을 열고 맥 옆에서 거기에 치고, 호스트를 통해 셸이나 CLI 를 열어. "뷰어일 뿐"이라서 칠 수 없는 아이폰은 두 번째 제품이야. 더 크다는 이유로 아이폰이 못 하는 걸 하는 아이패드도 두 번째 제품이야. 둘 다 계약 하나 시험에 져.

보이는 건 둘, 키보드 포커스는 하나

아이패드는 호스트 세션 둘을 화면에 올릴 수 있어. 투영의 사치야. 판마다 자기 상태를 따로 들고 있어. 칠 수 있음, 홀드 중, 다른 쪽이 홀드 중, 관찰 중. 그리고 키보드 포커스는 정확히 하나에만 있어. 포커스된 판은 Keyboard here 라고 말해. 조종이 승인된 기기라면 다른 판은 칠 수는 있지만 지금 키가 가는 곳은 아니라고 말해. 다른 판을 탭하면 키보드 포커스가 옮겨 가. 누구한테서 뭘 뺏는 게 아니야. 같이 치는 계약에서는 뺏기는 게 없으니까.

아이패드에 하드웨어 키보드를 붙이면 치는 게 너무 자연스러워져. 그래서 포커스가 헷갈릴 수 없어야 해. 키 입력은 Keyboard here 를 보여 주는 판 하나로만 가. 커서가 마지막에 칠한 판으로 가지도, 둘 다로 가지도 않아. 읽기만 승인된 기기는 유리 크기가 뭐든 아무 데도 못 쳐.

사이즈 클래스는 권한을 찍어내지 않아

회전, 분할 보기, Stage Manager. 그건 사각형을 몇 개 볼 수 있는지를 바꿔. 입력을 주지도 않고 호스트를 리사이즈하지도 않아. 격자는 여전히 마지막으로 친 쪽을 따라가. 사이즈 클래스 콜백이 판의 권한을 바꾸거나 데몬에 크기를 보내는 날이 오면, 관찰이 계약을 리사이즈한 거고, 그건 PTY 를 리사이즈하는 것보다 나빠.

전달은 TestFlight 로 바이너리 하나. 트랙 7 이 그 파이프라인을 고집할 거야. 이 레슨이 고집하는 이유는: 계약 하나는 흘러가는 앱 둘을 못 견뎌. 목적지 트랙의 나중 이정표(체크포인트, 직접 SSH, 키)도 앱 하나의 이정표지, 아이패드 전용 SSH 클라이언트와 아이폰 전용 뷰어가 아니야. 그걸 섞으면 주머니가 제품 둘이라고 가족을 가르친 거야. 아니야. 불 하나, 유리 크기 둘, 키가 있을 때 키의 주인 하나, 그리고 오늘은 분명한 키보드 포커스 하나.

유니버설 앱 하나. 사이즈 클래스는 세션을 몇 개 볼 수 있는지를 바꾸지, 거기서 뭘 해도 되는지를 바꾸지 않아. 아이폰은 하나, 아이패드는 둘일 수 있고, 키보드 포커스는 정확히 한 판에 있어. 앱이 둘이면 입력 계약을 틀릴 곳이 둘이야.

Code

사이즈 클래스는 보임이지 소유가 아니야·text
iPhone compact     ->  one session visible
iPad regular       ->  one or two sessions visible
both               ->  each pane keeps its own state (typing / held / observing)
both               ->  exactly ONE pane has keyboard focus ("Keyboard here")
both               ->  same gateways, same pin, same ember

# Hardware keyboard on iPad
  keystrokes         -> the pane that shows "Keyboard here"
  other visible pane -> not a target until you focus it
  read-only device   -> nowhere, on any glass

# Forbidden splits of the product
  "iPhone is viewer, iPad is terminal"
  "a size-class callback changes permission or sends a size"
  two bundle identities, two TestFlight trains, two pins

External links

Exercise

둘 다 조종이 승인된 기기라고 치고, 아이폰(세션 하나)이랑 아이패드(세션 둘)를 나란히 그려. 유리마다 어느 판에 키보드 포커스가 있는지, 판마다 상태 줄이 뭐라고 할지 표시해. 그다음 아이패드에서 하드웨어 키보드 글자가 뭘 하는지, 읽기만 승인된 기기였다면 뭘 할지 써. 답이 "둘 다에 친다"거나 "활성처럼 보이던 데로 친다"면, 포커스는 이미 갈라진 거야.
Hint
보이는 판은 둘, 키보드 포커스는 하나. 권한은 기기에서 오지, 유리 크기에서 오지 않아.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.