加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 使用Xcode 8创建通用框架?

发布时间:2020-12-15 01:48:15 所属栏目:百科 来源:网络整理
导读:我公司的iOS框架适用于真正的iOS设备.所述框架当前作为Xcode项目中的附加目标生成,该Xcode项目还生成应用程序. (这使得调试框架变得相对容易.) 我们最近也收到了让它在模拟器中工作的请求.我现在可以这样做,下一步是创建一个既可以在真实设备上也可以在模拟
我公司的iOS框架适用于真正的iOS设备.所述框架当前作为Xcode项目中的附加目标生成,该Xcode项目还生成应用程序. (这使得调试框架变得相对容易.)

我们最近也收到了让它在模拟器中工作的请求.我现在可以这样做,下一步是创建一个既可以在真实设备上也可以在模拟器中运行的编译版本.遗憾的是,我无法找到任何材料,表明任何人都使用Xcode 8来完成此操作.有些材料解释了如何使用旧版本的Xcode,但在一个版本的Xcode中工作的可能不起作用或在以后建议版. (我们已经有了一种在我们身上创建通用框架的方法.)我尝试使用一些pre-Xcode 8脚本,但它们都没有工作.

有没有人设法使用Xcode 8为iOS生成通用框架?如果是这样,怎么办呢?

提前感谢任何人都可以提供的帮助.

亚伦阿德尔曼

解决方法

这是可能的,因为我目前正在Xcode 8上开发iOS,watchOS和tvOS上的通用框架.

我这样做的方法是创建一个Aggregate目标(跨平台)并在其构建阶段添加一个运行脚本.该脚本基本上编译了iphonesimulator和iphoneos的iOS目标

在此之后,它创建一个合并它们的新二进制文件(lipo -create -output)

您是否介意发布您当前的构建脚本以生成通用框架,以便我可以指导您做错了什么?

考虑到脚本可能不是您的问题,您的问题可能是设置有效的体系结构,架构甚至是如何签署目标.我现在建议,不要选中目标常规设置中的自动管理签名选项,并手动设置配置文件和证书.

运行脚本:

#!/bin/sh

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

# make sure the output directory exists
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}/iOS"

# Step 1. Build Device and Simulator versions on iOS
xcodebuild -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${PROJECT_NAME}"  -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' clean build
xcodebuild -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${PROJECT_NAME}" -sdk iphoneos clean build

# Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/iOS"

# Step 3. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/iOS/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"

# Step 4. Convenience step to copy the framework to the project's directory
mkdir -p "${TMPDIR}/${PROJECT_NAME}/Frameworks/iOS"

cp -R "${UNIVERSAL_OUTPUTFOLDER}/iOS/${PROJECT_NAME}.framework" "${TMPDIR}/${PROJECT_NAME}/Frameworks/iOS"


# Step 6. Create .tar.gz file for posting on the binary repository
cd "${TMPDIR}"

# We nest the framework inside a Frameworks folder so that it unarchives correctly
tar -zcf "${PROJECT_NAME}.framework.tar.gz" "${PROJECT_NAME}/Frameworks/"
mv "${PROJECT_NAME}.framework.tar.gz" "${PROJECT_DIR}/"

# Step 7. Convenience step to open the project's directory in Finder
#open "${PROJECT_DIR}"

考虑到我在构建设置中将Build Active Architecture Only设置为NO,同样有效的架构设置为arm64,x86_64,i386,armv7,armv7s.架构是${ARCHS_STANDARD} armv7s.

我还设置了用户定义的构建设置BITCODE_GENERATION_MODE bitcode.使用此构建设置,我确保生成启用了bitcode的二进制文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读