如何解决具有Pod依赖项的XCFramework
我们的目标是创建一个隐藏我们内部代码并向客户提供SDK的框架。 我们已经考虑过创建满足我们要求的XCFramework。互联网上也建议使用伞形框架,但大多数情况下建议避免这种方法。我们的框架依赖于我们通过Pods使用的某些第三方库。
问题:XCFramework不编译pod框架。我们收到类似“找不到Xyz(Pod)模块”的错误。即使我们从客户端添加pod也不起作用。
创建XCFramework的代码如下所示
1)为iOS平台创建存档
xcodebuild archive -workspace ABC.xcworkspace \
-scheme ABC \
-sdk iphoneos \
-archivePath "./archives/ios_devices.xcarchive" \
BUILD_LIBRARY_FOR_disTRIBUTION=YES \
SKIP_INSTALL=NO
2)为iOS-Simulator平台创建存档
xcodebuild archive -workspace ABC.xcworkspace \
-scheme ABC \
-sdk iphonesimulator \
-archivePath "./archives/ios_simulators.xcarchive" \
BUILD_LIBRARY_FOR_disTRIBUTION=YES \
SKIP_INSTALL=NO
3)从存档创建XCFramework
xcodebuild -create-xcframework \
-framework ./archives/ios_devices.xcarchive/Products/Library/Frameworks/ABC.framework \
-framework ./archives/ios_simulators.xcarchive/Products/Library/Frameworks/ABC.framework \
-output build/ABC.xcframework
我们成功获得了ABC XCFramework,但相关性未包含在XCFramework中。有什么解决办法吗?或有什么方法可以将框架搜索路径设置为客户端?或其他替代方法?
解决方法
您可以创建一个pod并将其发布。
选中https://guides.cocoapods.org/making/making-a-cocoapod.html
具有XCFramework +第三方依赖性的示例Podspec文件
Pod::Spec.new do |s|
s.name = 'XCFrameworkTest' # Name for your pod
s.version = '0.0.1'
s.summary = 'Sample Spec'
s.homepage = 'https://www.google.com'
s.author = { 'Sample' => 'sample@sample.com' }
s.license = { :type => "MIT",:text => "MIT License" }
s.platform = :ios
# change the source location
s.source = { :http => 'http://localhost:8080/XCFrameworkTest.zip' }
s.ios.deployment_target = '10.0'
s.ios.vendored_frameworks = 'XCFrameworkTest.xcframework' # Your XCFramework
s.dependency 'PromisesSwift','1.2.8' # Third Party Dependency
end
发布pod之后,客户可以使用cocopods获取我们的框架。
在客户的Podfile中
pod 'XCFrameworkTest' #Your pod name
,
我为此创建了一个模板。您可以通过运行命令进行测试
pod lib create YourLibName --template-url="https://github.com/zalazara/pod-template-xcframework.git"
模板基本上会生成一个示例项目及其 podfile 文件,其中嵌入要开发的框架,然后生成文件使用工作区编译框架。
BUILD_DIR="Build"
TMP_DIR="${BUILD_DIR}/Tmp"
IOS_ARCHIVE_PATH="${TMP_DIR}/iOS.xcarchive"
IOS_SIM_ARCHIVE_PATH="${TMP_DIR}/iOSSimulator.xcarchive"
rm -rf ${BUILD_DIR}
rm -rf "${FRAMEWORK_NAME}.xcframework"
xcodebuild archive \
-workspace "Example/${WORKSPACE}" \
-scheme ${SCHEME} \
-archivePath ${IOS_SIM_ARCHIVE_PATH} \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
| xcpretty
xcodebuild archive \
-workspace "Example/${WORKSPACE}" \
-scheme ${SCHEME} \
-archivePath ${IOS_ARCHIVE_PATH} \
-sdk iphoneos \
SKIP_INSTALL=NO \
| xcpretty
xcodebuild -create-xcframework \
-framework ${IOS_SIM_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
-framework ${IOS_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
-output ${FRAMEWORK_NAME}.xcframework \
| xcpretty
更多信息:https://github.com/zalazara/pod-template-xcframework.git
,Ayyanar 的解决方案对我有用,但在构建时出现错误:“无法从其模块接口构建模块;它可能已损坏,或者可能在生成时触发了 Swift 编译器中的错误”。
我解决了将目标链接到 Pod 中的 .xcframwork 的问题。
希望对某人有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。