Sam*_*io2 251 macos frameworks dyld xcode5
我正在尝试创建一个基本的OS X Framework,现在我只创建了一个测试框架:TestMacFramework.framework我正在尝试将其导入到一个全新的OS X应用程序项目中.
我已经构建了.framework文件并将其导入到新项目中.框架似乎链接好了,我可以引用我添加到框架构建阶段部分的公共头文件.
但是,当我尝试运行容器应用程序时,我得到以下错误:
dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
经过一段谷歌搜索后,我意识到我需要在Copy Files容器应用程序构建阶段添加一个部分,所以我已经完成了这个并将其设置为......

但是,我仍然遇到运行时错误.我显然在这里做错了,但Apple开发人员库资源引用了Xcode 2,所以不是很有帮助!
我错过了什么?
更新:
我可以在构建日志中看到我TestMacFramework.framework被复制到.app内容/框架目录中,但它没有安装到HD上的Library/Frameworks目录中

更新2:
如果我手动将其复制TestMacFramework.framework到Library/Frameworks目录中,则构建链接正确
Kap*_*ppe 511
[来自Xcode 6 - > 7.3]
(是的,仍在使用Xcode 10,iOS和macOS)
唯一要做的是将框架添加到应用目标选项卡中的Embedded binaries部分General.

Sam*_*io2 55
所以我设法让它工作,当你有正确的指示时,这很简单.我正在寻找的是一个"私有"框架,它存在于应用程序包中,而不是写入系统库文件夹.
构建框架
包括框架
Vin*_*ent 15
上面的选项我不能包括在内.我通过指定Runpath搜索路径解决了它
这是在" 构建设置 "选项卡上.在" 链接 "部分.将" Runpath搜索路径 " 更改为$(inherited) @executable_path/Frameworks
这些问题都没有为我解决这个问题.最终的问题很简单.看起来它是一个非常重要的Xcode错误,我已经记录了问题并修复了Apple错误:29820370.如果你正在努力(因为看起来有几页类似的问题),那么如果你能这样做会很棒提出bug记者的错误:https://bugreport.apple.com/并引用我提出的错误以获得可见性.我想让Xcode恢复到以前的乐趣 - 这是我确信Xcode应该自行修复的东西.
以下是修复:1.打开钥匙串 - 转到Apple Worldwide Developer Cert.2.双击它3.从"始终信任"更改权限级别以使用系统默认值4.保存并关闭它5.重新启动Xcode,清理并构建项目,它应该消失.
Xcode 11:
在 Xcode 11 中添加框架到 General->Frameworks, Libraries And Embedded Content
添加后确保选择Embed & Sign选项
我遇到了同样的问题但是接受的解决方案对我不起作用.相反,解决方案是修改框架的安装名称.
原帖中的错误是:
dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
请注意未加载库之后的第一个路径.框架是从绝对路径加载的.此路径来自框架的安装名称(有时称为rpath),可以使用以下方法检查:
otool -D MyFramework.framework/MyFramework
Run Code Online (Sandbox Code Playgroud)
当框架嵌入到应用程序中时,此路径应该是相对的并且具有以下形式:@ rpath/MyFramework.framework/MyFramework.如果框架的安装名称是绝对路径,则可能无法在运行时加载,并且将生成类似于上述错误的错误.
解决方案是修改安装名称:
install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework
Run Code Online (Sandbox Code Playgroud)
通过此更改,我不再收到错误
在“构建阶段”中应该有一个“运行脚本”,其内容为:“ / usr / local / bin / carthage copy-frameworks”
在“运行脚本”的“输入文件”上,应将路径添加到库中。像这样:

当您将自定义框架拖到Xcode 10.1下的项目中时,它假定该框架是系统框架,并将该框架放入目标下“构建阶段”的“使用库链接二进制文件”部分。
系统框架已在设备上,因此不会被复制到设备上,因此无法在运行时执行,因此KABOOM (__ abort_with_payload崩溃,并提示错误:“原因:未找到映像”)。这是因为框架代码未复制到设备上。
实际上,要让Xcode链接自定义框架并确保将其与您的代码一起复制到iOS设备(真实或模拟器),则需要将自定义框架移至“复制捆绑资源”。最终,它将框架与可执行代码打包在一起,以在设备上一起提供。
要将自定义框架添加到项目中并避免Apple崩溃:
这样,自定义框架将与您的代码一起复制到目标设备,并在运行时可用。
[编辑:您会认为 Xcode足够聪明,可以找出不需要复制到设备的系统框架之一与项目根目录层次结构中的自定义框架之间的区别,哦,我不知道...]
| 归档时间: |
|
| 查看次数: |
193276 次 |
| 最近记录: |