我正在开发由 Carthage 集成的多个级联动态框架集。我试图调整此blog post和WWDC视频Sharing code between iOS and OS X
中的主体我有3个动态框架,它们以级联格式相互包含:
动态框架: DataManager 包括动态框架: GDL90 包括DynamicFramework: EGL96 。
我正在做的事情就是采取单一目标并将其配置为为iOS和Mac构建框架explained here
machos iphoneos iphonesimucator
arm64 armv7 armv7s i386 x86_64
然后在测试目标下更改搜索路径:
$(inherited) @executable_path/Frameworks @loader_path/Frameworks @executable_path/../Frameworks @loader_path/../Frameworks
$(SDKROOT) $(inherited)
我将 EGM96 项目配置为为多个目标构建多个构建。这很好用,编译得很好。麻烦开始的地方是我们一旦得到迦太基。
在我的 GDL90 项目中,我收录了来自carthage的 EGM96
运行carthage update
后,我最终得到以下文件:
./Carthage/Build/Mac/EGM96.framework
./Carthage/Build/iOS/EGM96.framework
我还配置了 GDL90 项目来进行多平台构建,但那是错误开始的地方。我无法动态配置构建过程(到目前为止),以根据正确的目标(即从/Carthage/Build/Mac/EGM96.framework
拉出OS X构建版本)引入正确的框架版本。
我花了一些时间浏览build variables的Xcode,我还没有找到一个有效的解决方案。
需要注意的是,最初iOS
项目已经在iOS
框架中链接到Xcode中,因此我最终得到了完全合适的错误:
ld: building for OSX, but linking in object file built for iOS, file '/Users/jstein/devel/DigitalCopilot/GDL90/Carthage/Build/iOS/EGM96.framework/EGM96' for architecture x86_64
对于某些隐藏的构建变量是否存在简单解决方案我错过了允许在编译时Xcode从适当的carthage构建路径中拉出框架?