Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 使用插件和iTunesLibrary对OS X应用程序进行代码签名_Macos_Xcode5_Osx Mavericks_Codesign_Ituneslibrary - Fatal编程技术网

Macos 使用插件和iTunesLibrary对OS X应用程序进行代码签名

Macos 使用插件和iTunesLibrary对OS X应用程序进行代码签名,macos,xcode5,osx-mavericks,codesign,ituneslibrary,Macos,Xcode5,Osx Mavericks,Codesign,Ituneslibrary,我有一个非常奇怪的代码设计问题。以前的一个几乎相同的版本已经通过了验证并提交到了应用商店,所以我的代码签名没有被破坏 最近我一直在尝试使用这个框架。此框架仅在您的应用程序是代码签名的情况下工作。我在尝试初始化框架时遇到一个常见错误,表明代码签名失败: Error Domain=NSPOSIXErrorDomain Code=100001“无法加载”。UserInfo=0x100329d80{NSLocalizedDescription=无法加载。NSUnderlyingError=0x10031

我有一个非常奇怪的代码设计问题。以前的一个几乎相同的版本已经通过了验证并提交到了应用商店,所以我的代码签名没有被破坏

最近我一直在尝试使用这个框架。此框架仅在您的应用程序是代码签名的情况下工作。我在尝试初始化框架时遇到一个常见错误,表明代码签名失败:

Error Domain=NSPOSIXErrorDomain Code=100001“无法加载”。UserInfo=0x100329d80{NSLocalizedDescription=无法加载。NSUnderlyingError=0x10031a430“操作无法完成。(OSStatus错误100005)。”}

我的应用程序被组织成多个框架,包括动态链接和插件。我一直在使用
--deep
标志对我的应用程序进行递归签名,但显然这是错误的。现在,我正在使用
运行脚本
构建阶段对我的每个框架和插件进行签名。这似乎是因为
codesign
告诉我应用程序已签名

我已经在调试模式下构建了应用程序,并将其归档,导出为开发人员ID签名的程序,并检查了签名——两种构建模式都通过了。当我运行它时,我从
iTunesLibrary
中得到上述错误。真正奇怪的是,如果我导出应用程序并按如下方式重新签名,那么
iTunesLibrary
功能正常:

codesign --force --sign "MyIdentity" --deep MyApp.app
如果我使用
spctl--assessment
尝试告诉我更多关于这一点的信息,我了解到尽管该应用程序工作正常,但它的签名仍然很糟糕:

/Users/me/Desktop/MyApp.app: rejected
另一方面,
iTunesLibrary
不喜欢的应用程序通过了
spctl
检查:

/Users/me/Desktop/MyApp.app: accepted
source=Developer ID
origin=Developer ID Application: Me

解决方案是将iTunesLibrary框架链接到主可执行文件以及实际使用它的框架


我很想知道为什么…

如果要嵌入框架,则需要创建一个“复制文件”构建阶段,将.framework移动到框架目标中。添加构建阶段后,添加一个运行脚本,其中包含以下内容:

LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
IDENTITY="Developer ID Application: Certificate Common Name"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/your.framework/Versions/A"
简言之,
--deep
标志无法正确执行此任务。是的,它递归地对嵌套的bundle进行签名,但是,它将顶级bundle的参数应用于所有嵌套的bundle。反过来,应用程序的权限将导致生成的捆绑包无效

人类协同设计——deep还指出:

);任何间接嵌套的内容都需要递归应用 协同设计命令


是的,所有这些都完成了。问题在于iTunesLibrary的代码签名检查似乎要求框架链接到主可执行文件,而不是动态库或插件。