Apple 알림 그룹
GitHub 레이블: O-macos, O-ios, O-tvos, O-watchos, O-visionos
핑 명령: @rustbot ping apple
이 목록은 Apple 관련 이슈를 진단하고 테스트할 때 도움을 요청하고, macOS/iOS/tvOS/watchOS/visionOS 지원과 관련된 흥미로운 질문을 해결하는 방법에 대한 제안을 구하는 데 사용됩니다.
이 그룹이 하는 일을 더 잘 이해할 수 있도록, 최선의 조치를 결정하기 위해 그룹에 조언을 구했을 법한 질문의 예를 몇 가지 소개합니다.
배포 타깃
Apple 플랫폼에는 “배포 타깃(deployment target)“이라는 개념이 있습니다. 배포 타깃은 *_DEPLOYMENT_TARGET 환경 변수로 제어하며, 바이너리가 실행될 수 있는 최소 OS 버전을 지정합니다.
표준 라이브러리에서 rustc가 사용하는 기본값보다 최신 OS 버전의 API를 사용하면 정적 링커 오류나 동적 링커 오류가 발생합니다. 따라서 extern "C" API에는 해당 API가 도입된 OS 버전을 문서화하도록 제안하고, 그 버전이 rustc가 현재 사용하는 기본값보다 최신이라면 약한 링킹(weak linking)을 사용하도록 제안하십시오.
App Store와 비공개 API
Apple은 문서화되지 않은 API 사용에 매우 엄격합니다. 바이너리에서 문서화되지 않은 API를 호출하지 않고 언급만 해도 App Store에서 거부될 수 있으므로, 변경 사항에서 새 함수를 사용할 때마다 해당 함수가 실제로 공개 API인지 반드시 확인해야 합니다.
예를 들어 Darwin / XNU 커널에는 실제로 futex 시스템 호출이 있지만, 공개 API가 아니므로 std에서 사용할 수 없습니다.
일반적으로 Apple이 공개 API로 간주하려면 해당 API는 다음 조건을 충족해야 합니다.
- 공개 헤더에 포함되어 있어야 합니다(즉, Xcode와 함께 배포되며 특정 플랫폼의
xcrun --show-sdk-path --sdk $SDK아래에서 찾을 수 있는 헤더여야 합니다). - 가용성 속성(
__API_AVAILABLE,API_AVAILABLE등)이 붙어 있어야 합니다.