"성공한 swift build 는 배포 증명이 아냐."
제일 비싼 초록 체크마크
swift build 돌려서 성공하면, 네 뇌 속 뭔가가 그 작업을 완료로 분류해. 큰 C 라이브러리를 embed 하는 네이티브 앱한텐, 그 본능이 시한폭탄 달린 함정이야. 초록 빌드는 네 환경에서 코드가 컴파일되고 링크됐다는 것만 증명해. 네 것 아닌 Mac 에서 앱이 실행이라도 될지는 아무 말도 안 하고.
이유는, 링커가 libmpv 를 어디서 찾았느냐야. 네 개발 머신에선 Homebrew 가 걜 깔끔한 경로에 놔두고, 빌드가 신나게 거기 링크해. 근데 그 정확한 바이너리를 Homebrew 없는 깨끗한 Mac 에 배포하면, 없는 dylib 을 찾다 실행하자마자 죽어. 빌드는 정직했어. 찾은 걸 링크했을 뿐이지. 찾은 게 여행을 안 할 뿐이고.
함정은 명령 하나면 보여. 빌드된 바이너리한테 의존성이 어디 산다고 생각하는지 물어봐.
Build, Release, Run 은 세 다른 것이야
제일 깔끔한 사고 모델은 twelve-factor 규율에서 빌려와. build, release, run 은 별도 단계라는 거. build 는 소스를 아티팩트로 바꿔. release 는 그 아티팩트를 자립하고 버전 붙은 뭔가로 패키징하고. run 은 그 release 가 진짜 타겟에서 실행되는 거야. Ashen Reel 은 일부러 이 셋을 갈라 취급해. build 는 바이너리를 만들고, 스크립트로 도는 release 는 전체 의존성 closure 를 번들하고 서명하고, run 은 실제 설치된 앱에서 증명돼. 이 셋을 뭉치는 게 딱, dev 전용 dylib 경로가 사용자의 실행 실패까지 쭉 흘러가는 방식이고.