샌드박스란?
https://bokoo.tistory.com/entry/macOS-%EC%83%8C%EB%93%9C%EB%B0%95%EC%8A%A4%EB%9E%80
-600에러와 샌드박스
상황
샌드박스 환경의 Xcode에서 applescript를 실행하여 다른 앱을 동작시키면 -600에러가 발생
에러 내용
AppleScript 실행 오류: {
NSAppleScriptErrorAppName = Numbers;
NSAppleScriptErrorBriefMessage = "Application isn\\U2019t running.";
NSAppleScriptErrorMessage = "Numbers got an error: Application isn\\U2019t running.";
NSAppleScriptErrorNumber = "-600";
NSAppleScriptErrorRange = "NSRange: {221, 8}";
}
오류 분석
애플의 공식 문서에 의하면, 맥 앱을 배포하기 위해서는 샌드박스 환경이어야 합니다.
샌드박스의 기능은 macOS 앱의 시스템 리소스 및 사용자 데이터에 대한 액세스를 제한합니다. (앱의 액세스를 제한하여 시스템 리소스와 사용자 데이터를 보호합니다.)
샌드박스는 앱이 시스템의 다른 부분과 격리된 환경에서 실행되도록 하는 보안 기술입니다.
따라서, 애플은 앱에서 다른 앱으로의 접근을 권장하지 않습니다.
결론적으로, 샌드박스 환경에서 애플 스크립트를 통해 다른 앱을 켜는 행위 자체가 샌드박스의 기능을 위반하게 됩니다.
사유
“샌드박스” + “다른 앱을 열려는 시도” 때문
mac app을 release하기 위해서는 App Sandbox 기능을 활성화해야 합니다. (샌드박스는 맥 앱 배포를 위해 꼭 필요한 것.)
sandbox는 앱의 액세스를 제한하여 시스템 리소스와 사용자 데이터를 보호하는 기능을 합니다.
따라서, 샌드박스의 기능과 우리가 하려는 애플 스크립트를 통해 다른 앱(넘버스)을 여는 것이 충돌 됩니다.
그래서 -600에러가 발생합니다.
이를 해결하기 위해서는 -600에러를 해결하면서 샌드박스를 삭제하지 않는 방법을 찾거나, 샌드박스를 삭제하여야 함.
샌드박스를 삭제하게 되면 앱 배포는 불가능 -> 무조건 웹으로 배포해야 함(.dmg형식)
references
- https://www.jessesquires.com/ico/favicon-32.png!https://joshspicer.com/favicon.pnghttps://forums.developer.apple.com/forums/public/assets/favicon.ico
- Using NSAppleScript Fails in Cocoa… | Apple Developer Forums
- AppleScript + Swift + Mojave
- Executing AppleScript in a Mac app on macOS Mojave and dealing with AppleEvent sandboxing
해결 방안 모색
해결방안1 - app sandbox temporary exception entitlements
앱 샌드박스 임시 예외 자격을 설정하는 방법입니다.
임시 예외 자격은 macOS 앱이 App Sandbox에서 허용하지 않는 특정 작업을 수행하도록 허용합니다.
numbersForMac.entitlements라는 파일에서 temporary exception entitlements를 설정해줍니다.
- references!https://www.jessesquires.com/ico/favicon-32.pnghttps://developer.apple.com/favicon.ico
- App Sandbox Temporary Exception Entitlements
- Executing AppleScript in a Mac app on macOS Mojave and dealing with AppleEvent sandboxing
진행 상황
다른 개발자들이 이미 시도했던 방법이지만 오류 해결 안됨
해결방안2 - 샌드박스 삭제
샌드박스를 삭제함으로써 앱의 액세스를 제한환경에서 벗어나도록 해줍니다.
하지만, 이 방법은 앱스토어 배포를 포기해야 하는 방법입니다.
최후의 수단으로 사용하여야 합니다.
결론
샌드박스 환경을 유지하며 다른 앱에 접근하는 방법을 찾지 못한다면, 무조건 웹으로 앱을 배포하여야 한다.
진행 상황
팀원들과 회의 끝에, 샌드박스를 삭제하고 웹 배포하는 방식으로 개발을 진행하기로 하였다.
references
- https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v=ec617d715196!https://joshspicer.com/favicon.png!https://www.jessesquires.com/ico/favicon-32.pnghttps://developer.apple.com/favicon.icohttps://developer.apple.com/favicon.ico
- App Sandbox | Apple Developer Documentation
- App Sandbox Temporary Exception Entitlements
- Executing AppleScript in a Mac app on macOS Mojave and dealing with AppleEvent sandboxing
- AppleScript + Swift + Mojave
- Applescript fails with error (-600) when launched over ssh on Mavericks
'iOS & macOS' 카테고리의 다른 글
[Swift] Profiling 방법 (0) | 2024.02.20 |
---|---|
[iOS] NearbyInteraction - NISession이 .finding에서 .found로 넘어가지 않는 문제 해결 (2) | 2024.01.13 |
[macOS] NSImage가 메모리에서 해제되지 않는 오류 해결 (1) | 2024.01.13 |
[macOS] 이미지가 많은 뷰 성능 최적화 - LazyVGrid (1) | 2024.01.13 |
[macOS] 파일 선택 기능 - Drag & Drop, NSOpenPanel (0) | 2024.01.12 |