AlB*_*die 16 xcode cocoa-touch objective-c ios
我有一个使用XCode 6构建的Cocoa Touch框架,目标是iOS> = iOS8.此框架的目标体系结构设置是默认设置,这意味着我没有更改任何内容.架构设置为标准(不包括x86_64,稍后将详细介绍).框架本身包含Swift和Objective-C代码,因此使用Ray Wenderlich的静态库解决方法构建它将不起作用.
现在,如果我创建一个新项目并将框架项目添加到它,该项目将为设备和模拟器构建,这很好.
但是,如果我将.framework文件添加到不同的项目中,就像添加任何其他框架一样,该项目将不会为模拟器构建.嗯,它确实构建,但它崩溃,因为它找不到相关的类.它在设备上运行良好,归档工作也正如预期的那样.
框架项目本身已经给了我一个警告; "Apple Mach-O链接器警告 - 找不到选项的目录....(Debug-ophoneos)".
任何帮助将非常感谢!
我终于找到了解决这个问题的方法.事实证明,XCode不再创造开箱即用的胖二进制文件.不知道Apple背后的理由是什么,我也似乎有时负责XCode的人喜欢取笑开发人员使用他们的产品......
无论如何,您可以找到关于如何为模拟器和所有iOS设备创建胖二进制文件的权威指南(是的,您甚至必须使用不同的体系结构才能获得适用于较新和较旧设备的框架):https:/ /kodmunki.wordpress.com/2015/03/04/cocoa-touch-frameworks-for-ios8-remix/
简而言之;
将以下脚本添加到框架的构建方案中作为存档后期操作;
设置-e
DEVICE_BIN ="$ {OBJROOT}/UninstalledProducts/$ {TARGET_NAME} .framework"SIMULATOR_BIN ="$ {SYMROOT} /../../../../ Products/Debug- iphonesimulator/$ {TARGET_NAME} .framework"
ARCHIVE_PATH ="$ {SRCROOT}/_ Archive"rm -rf"$ {ARCHIVE_PATH}"mkdir"$ {ARCHIVE_PATH}"
if ["$ {CONFIGURATION}"="释放"]; 然后
if [-d"$ {DEVICE_BIN}"]; 然后DEVICE_PATH ="$ {ARCHIVE_PATH}/Release"mkdir"$ {DEVICE_PATH}"cp -r"$ {DEVICE_BIN}""$ {DEVICE_PATH}"fi if [-d"$ {SIMULATOR_BIN}"]; 然后SIMULATOR_PATH ="$ {ARCHIVE_PATH}/Debug"mkdir"$ {SIMULATOR_PATH}"cp -r"$ {DEVICE_BIN}""$ {SIMULATOR_PATH}"lipo -create"$ {DEVICE_BIN}/$ {TARGET_NAME}""$ { SIMULATOR_BIN}/$ {TARGET_NAME}" - 输出"$ {SIMULATOR_PATH}/$ {TARGET_NAME} .framework/$ {TARGET_NAME}"
科幻
科幻
退出0;
这将在项目的目录中创建一个_Archive目录,您可以在其中找到调试和发布的框架.
重要提示:截至今天(2015年5月22日),您必须首先使用模拟器构建项目,然后使用设备进行存档.否则你将无法获得通用二进制文件!
这篇文章的创建是为了避免死链接错误,有关打包过程的更新,请始终尝试上面链接的kodmunki网站上发布的步骤,因为这篇文章中的步骤可能已经过时了!