맥 앱도 클라이언트야
폰이 생기면 맥 앱을 진짜 주인으로, 폰을 덧붙인 특수한 경우로 치고 싶어져. 그 갈라짐은 붙인 공장을 다시 만들어. 데스크톱 타입이 대화로 새고, 폰이 몰래 맥인 프로그램이 되고, AppKit 을 가져오는 타입은 여행하지 못해. Smolder 의 대답은 와이어 하나야. 공유 와이어 타입은 AppKit 없이, 로컬 프로세스 검사 없이, 로컬 파일시스템 가정 없이 컴파일돼. 맥 앱은 폰이 붙을 그 데몬의 클라이언트로 그 와이어 위에 붙어. 표면 둘. 대화 하나. 둘 뒤의 주인 하나.
"AppKit 없이"는 미학이 아니야. NSView 를 이름 붙인 타입은 iOS 에서 빌드가 안 돼. "이 판의 로컬 PID 가 뭐야"라고 묻는 타입은 판 PID 가 없는 폰에서 못 돌아. /Users/... 가 여기라고 가정하는 타입은 폰이 보기만 하는 호스트의 폴더를 못 말해. 그 가정들은 공유 모듈이 #if os 옷을 입은 맥 모듈이 되는 길이야. 옷은 폰이 채울 수 없는 필드가 필요한 날에 항상 찢어져.
와이어가 해도 되는 말
세션 정체성, 판 정체성, 저널 덩어리, 조종 행위로서의 리사이즈, 리스 잡힌 행위로서의 입력, 실행의 영수증. 데몬이 아는 것. 픽셀은 아니야. NSFont 도 아니야. 맥의 열기 패널로 들어가는 북마크도 아니야. 각 표면의 에뮬레이터가 같은 핀으로 바이트를 글리프로 바꿔. 와이어는 스크린샷을 실어 나르지 않아. 와이어 위에 스크린샷이 있으면, 에뮬레이터를 포기하고 원격 데스크톱을 시작한 거야. 그건 리사이즈가 틀리고 복사가 틀리고 구경꾼이랑 치는 사람을 구분을 못 해.
나중 트랙의 게이트웨이는 승인된 기기와 한도 있는 WebSocket 으로 말해. 입은 다르고 언어는 같아. 게이트웨이가 있기 전에 언어가 AppKit 없어야 해. 아니면 게이트웨이가 데스크톱 타입을 "폰 안전한" 그림자로 번역하기 시작하고, 번역은 두 번째 프로토콜이야. 프로토콜 하나. 입 둘 (맥 앱의 루프백 부착, 폰의 게이트웨이). 건너는 타입 위에 AppKit 은 영.
로컬 검사는 로컬에 남아
맥 위의 데몬은 자기 프로세스를 검사할 수 있어. 그 검사는 여행하지 않아. 제목을 보여야 하는 폰은 데몬이 이미 쥔 제목을 와이어에 묻지, 실행할 수 없는 sysctl 을 묻지 않아. 크롬을 그려야 하는 맥 창은 AppKit 에 묻고, 데몬이 알아야 하는 사실만 보내 (포커스된 판, 조종하는 표면이 요청한 크기). 그 층을 섞으면 구경꾼의 리사이즈가 "그냥 창 콜백"으로 새어 들어와.
이 레슨은 셸은 호스트에 남나의 타입 층 버전이야. 와이어가 iOS 에서 컴파일 못 하면 폰은 표면이 아니야. 모델을 공유하는 척하는 원격 조종 스크립트야. 컴파일러를 정직하게 두면 소유도 정직하게 남아.