Mac 应用程序在启动时崩溃,链接框架未捆绑
Posted
技术标签:
【中文标题】Mac 应用程序在启动时崩溃,链接框架未捆绑【英文标题】:Mac app crashes on launch, linked framework not bundled 【发布时间】:2012-10-08 06:49:49 【问题描述】:(编辑:我能够捆绑框架,但它仍然不会采用更改后的安装目录。因此,下面的问题已更改为“未找到链接和捆绑的框架图像”)
Mac 应用程序已提交给 MAS,但被 Apple 拒绝,原因非常合理:链接的框架未捆绑。
我只是询问如何确保它正确包含在捆绑包中,并在再次提交之前在我的 Mac 上确认。
请让我知道您需要我提供什么/任何额外信息。
编辑:按照 subzero 的说明获取更多信息。
当进行 Product > Build 时,.app 文件最终位于我机器上的 Documents/build/Release 中。
这是我的构建阶段的样子 - https://dl.dropbox.com/u/19155207/copyframeworks.jpg
并且 UIKit.Framework 文件夹 位于 WinKonto.app/Contents/Frameworks 内,其中包含:https://dl.dropbox.com/u/19155207/frameworksfolder.jpg
如果我从 Releases 文件夹运行它,它仍然会给出相同的错误。只有当我从 XCode 运行它时它才能工作。你能看出哪里不对劲吗?
编辑 2:我已将框架文件 (UIKit) 放入包中。
这是崩溃报告错误消息:
Dyld 错误消息:库未加载: Frameworks/UIKit.framework/Versions/A/UIKit 引用自: /Users/henrikerlandsson/Documents/build/Release/WinKonto.app/Contents/MacOS/WinKonto 原因:找不到图片
但是framework在bundle里面,在加入项目之前被install_name_tool修改了。
我不知道为什么那个修改不起作用,但是我把它变成了一个私有框架并改为在那里更改了安装目录,它起作用了(见我的回答)。
【问题讨论】:
【参考方案1】:在 XCode 中,
-
将 Copy Files 构建阶段添加到应用程序的目标
将其移至 Link 阶段上方,将其目标设置为 myApp.app/Contents/Frameworks 并将框架添加到其中。
【讨论】:
感谢您的快速回答:) 但是...在链接框架阶段之后,我确实有一个复制框架阶段(包含相关框架)。您的意思是我还必须将其作为文件复制到捆绑包中吗?另外,我希望在提交之前正确包含一些测试方法。我的意思是,不必再等两周。 好吧...在您使用复制文件阶段将文件复制到捆绑包上的 Frameworks 文件夹之后... xcode 将复制以及将您的应用程序链接到该捆绑包。现在进行测试 - 制作一个安装了 vanilla mac os 的 vm...复制你的包并运行它...如果它运行那么你应该没有问题 我没有在 Copy Files 阶段执行此操作,而是在另一个似乎用于复制框架的阶段,即 Copy Frameworks 阶段。该阶段是否将框架复制到包之外的其他地方?我以前也没有手动处理过 Mac 包,所以我真的不知道如何找到它并将其复制到另一个人的机器上。某处是否有 .app 文件? 您使用的是哪个版本的 xcode?在我拥有的 4.5 中...您没有任何专门用于复制框架的构建阶段...您是说以“框架”为目标的复制文件构建阶段...可以正常工作...至于构建 .app 包,它将位于 xcode(Preferences>Locations) 中设置的派生数据文件夹中...默认情况下 ~/Library/Developer/Xcode/DerivedData 所以你应该查看 ~/Library/Developer/Xcode/DerivedData/我把它做成了一个私有框架。我按照Embedding a Private Framework in Your Application Bundle 下的说明进行操作,这让我可以将框架的安装目录正确设置到它出现在包中的位置。
【讨论】:
以上是关于Mac 应用程序在启动时崩溃,链接框架未捆绑的主要内容,如果未能解决你的问题,请参考以下文章