xcode 如何嵌入依赖于体系结构的框架

tgabmvqs  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(106)

我的iOS项目依赖于一些CustomLib.framework。此框架包含两个单独的文件:一个用于模拟器,另一个用于真实的设备。
我把这些文件放到文件夹里
@(PROJECT_DIR)/device_frameworks/CustomLib.framework

@(PROJECT_DIR)/simulator_frameworks/CustomLib.framework
我编辑了
Build Settings->Search paths->Framework search paths

Any iOS Simulator SDK     $(PROJECT_DIR)/simulator_frameworks
Any iOS SDK               $(PROJECT_DIR)/device_frameworks

字符串
我不明白的是如何将CustomLib.framework添加到Xcode项目中,以及如何将其添加为嵌入式框架(Build phases->Embed frameworks)。因为在这些步骤中,我必须指定一个具体的框架,但是我在device_frameworkssimulator_frameworks文件夹中有两个单独的框架。

fcipmucu

fcipmucu1#

xcode中没有办法根据架构包含它们,但Apple推出了2019 XCFrameworks作为新的代码分发格式。
从XCode 11 release notes
XCFramework可以将用于多个平台(包括iOS设备、iOS模拟器和Mac Catalyst)的二进制框架或库捆绑到一个可分发的.xcframework捆绑包中,您的开发人员可以在自己的应用程序中使用。
您可以使用此功能将这两个框架捆绑到一个框架中,将其添加到您的项目中,Xcode在构建时使用所包含框架或库的正确平台版本。
您可以使用以下命令从终端创建XCFramework:

xcodebuild -create-xcframework -framework PATH_TO_FRAMEWORK1 -framework PATH_TO_FRAMEWORK2 -output PATH_TO_BUNDLED_FRAMEWORK

字符串
其中PATH_TO_FRAMEWORK1PATH_TO_FRAMEWORK2是到框架的路径,PATH_TO_BUNDLED_FRAMEWORK是生成的XCFramework的路径。
假设你在你的项目目录中,命令可能看起来像这样:

xcodebuild -create-xcframework -framework device_frameworks/CustomLib.framework -framework simulator_frameworks/CustomLib.framework -output BundledCustomLib.xcframework


然后你只需要将BundledCustomLib.xcframework添加到你的项目中。

qjp7pelc

qjp7pelc2#

这很简单,你可以在xcode *.pbxproj中使用变量,比如:

55C7DBBB27DA529E000E0A09 /* rutoken_splitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = rutoken_splitter.framework; path = "../../../_result/$(BUILD_ARCHITECTURE)-$(SUPPORTED_PLATFORMS)$(RUNTIME_SUFFIX)/framework/rutoken_splitter.framework"; sourceTree = "<group>"; };

字符串
在我的示例中,我使用变量BUILD_ARCHITECTURE、SUPPORTED_PLATFORMS和RUNTIME_SUFFIX。最简单的方法是通过 *.xcconfig设置这些变量

相关问题