2

xcode를 사용하지 않으므로 python 2.7을 사용하여 osx 10.9에서 응용 프로그램을 만들었습니다. 나는 부호로 그것을 서명했다 그러나 spctl 명령으로 검사 될 때, 는 거절했다를 보여주고있다.osx에서 mac mac app에 서명하는 법

명령은 다음과 같습니다

codesign -s "3rd Party Mac Developer Application: Cloud Inc" -v -f /Applications/Cloud/logout.app/Contents/Frameworks/Python.framework/Versions/2.7 
codesign -s "3rd Party Mac Developer Application: Cloud Inc" -v -f --entitlements /Users/Cloud/Desktop/app.entitlements /Applications/Cloud/logout.app/Contents/MacOS/python 
codesign -s "3rd Party Mac Developer Application: Cloud Inc" -v -f --entitlements /Users/Cloud/Desktop/app.entitlements /Applications/Cloud/logout.app/Contents/MacOS/logout 
codesign -s "3rd Party Mac Developer Application: Cloud Inc" -v -f --entitlements /Users/Cloud/Desktop/app.entitlements /Applications/Cloud/logout.app 
spctl --assess --type execute /Applications/Cloud/logout.app 
/Applications/Cloud/logout.app: rejected 

의 Info.plist 파일은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>CFBundleDevelopmentRegion</key> 
    <string>English</string> 
    <key>CFBundleDisplayName</key> 
    <string>logout</string> 
    <key>CFBundleExecutable</key> 
    <string>logout</string> 
    <key>CFBundleIconFile</key> 
    <string>cc.icns</string> 
    <key>CFBundleIdentifier</key> 
    <string>com.cloud.macapp.logout</string> 
    <key>CFBundleInfoDictionaryVersion</key> 
    <string>6.0</string> 
    <key>CFBundleName</key> 
    <string>logout</string> 
    <key>CFBundlePackageType</key> 
    <string>APPL</string> 
    <key>CFBundleShortVersionString</key> 
    <string>4.4</string> 
    <key>CFBundleSignature</key> 
    <string>CC4B</string> 
    <key>LSApplicationCategoryType</key> 
    <string>public.app-category.reference</string> 
    <key>CFBundleVersion</key> 
    <string>4.4</string> 
    <key>LSHasLocalizedDisplayName</key> 
    <false/> 
    <key>NSAppleScriptEnabled</key> 
    <false/> 
    <key>NSHumanReadableCopyright</key> 
    <string>Copyright © 2014 Cloud, Inc.</string> 
    <key>NSMainNibFile</key> 
    <string>MainMenu</string> 
    <key>NSPrincipalClass</key> 
    <string>NSApplication</string> 
    <key>PyMainFileNames</key> 
    <array> 
     <string>__boot__</string> 
    </array> 
    <key>PyOptions</key> 
    <dict> 
     <key>alias</key> 
     <false/> 
     <key>argv_emulation</key> 
     <false/> 
     <key>emulate_shell_environment</key> 
     <false/> 
     <key>no_chdir</key> 
     <false/> 
     <key>prefer_ppc</key> 
     <false/> 
     <key>site_packages</key> 
     <false/> 
     <key>use_faulthandler</key> 
     <false/> 
     <key>use_pythonpath</key> 
     <false/> 
     <key>verbose</key> 
     <false/> 
    </dict> 
    <key>PyResourcePackages</key> 
    <array> 
    </array> 
    <key>PyRuntimeLocations</key> 
    <array> 
     <string>@executable_path/../Frameworks/Python.framework/Versions/2.7/Python</string> 
    </array> 
    <key>PythonInfoDict</key> 
    <dict> 
     <key>PythonExecutable</key> 
     <string>/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python</string> 
     <key>PythonLongVersion</key> 
     <string>2.7.8 (default, Jul 7 2014, 20:30:57) 
[GCC 4.2.1 (Apple Inc. build 5664)]</string> 
     <key>PythonShortVersion</key> 
     <string>2.7</string> 
     <key>py2app</key> 
     <dict> 
      <key>alias</key> 
      <false/> 
      <key>template</key> 
      <string>app</string> 
      <key>version</key> 
      <string>0.8</string> 
     </dict> 
    </dict> 
</dict> 
</plist> 

그리고 app.entitlements 파일은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>com.apple.security.app-sandbox</key> 
    <true/> 
</dict> 
</plist> 

info.plist 및 app.entitlements 및 command를 확인하고 spctl을 사용하여 확인한 거부 된 문제를 해결할 수있는 몇 가지 방법을 제안하십시오.

답변

1

저는 Apple 설명서가이 영역에서 조금 부족하다고 생각합니다.

"제 3 자 Mac 응용 프로그램 개발자"인증서는 Apple의 문서에서 특정 서비스에 대한 액세스를 허용하는 것으로 언급되어 있습니다. 그러나 해당 서비스에 해당 서비스가 구체적으로 명시되어 있지는 않지만, iCloud 스토리지, 인앱 구매, 게임 센터, 푸시 알림.

"제 3 자 ..."인증서는 Apple의 App Store에 응용 프로그램 및 설치 프로그램을 제출하기위한 것입니다. Apple의 App Store는 Apple이 승인 한 후 자체 인증서를 추가합니다.

대조적으로 "개발자 ID ..."인증서는 앱 스토어 외부에 배포하기위한 것입니다.

spctl 도구는 보안 평가 정책 하위 시스템을 제어하고 Gatekeeper와 관련이있는 명령 줄 도구입니다.

"제 3 자 ..."인증서는 스토어를 위해 Apple에 보내는 것을 의미하며 인증서를 제거하고 다시 서명해야합니다. 내 연구 결과에 따르면 spctl은 Apple Store 또는 개발자 ID 인증서로만 반품 가능.

게시물 this을 읽고, 이것도 확인하는 것 같습니다.

개발자 ID 인증서는 팀 에이전트에서만 획득 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. "타사 Mac 개발자 응용 프로그램"Mac Appstore에 업로드하려는 서명 용으로 사용하고 있습니다. 거부 된 것이 있으므로 앱 스토어에 제출하기 위해 계속 진행해야합니다 (Apple이 거부 할 것으로 의심 됨) – imp

+0

"제 3 자 .."인증서를 Apple에 보내려면 Apple에 서명해야합니다. 앱 스토어. – TheDarkKnight

+0

예 "제 3 자 .."라고 노래하고 있습니다. 증명. 그러나 spctl은 거부되었다고 말하고 있습니다. 그렇다면이 거부 된 앱을 앱 스토어에 제출하거나 다른 작업을해야합니까? – imp