前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS组件化(二)

iOS组件化(二)

作者头像
Raindew
发布2019-01-28 11:16:47
6520
发布2019-01-28 11:16:47
举报
文章被收录于专栏:Rindew的iOS技术分享

接上一篇iOS组件化(一)博客

我们已经初步制作了一个简单的SDK,并且加入了资源图片,公开了管理类。

如果有去实践的朋友,你应该会发现Build这个SDK是一件相当麻烦的事情。不仅仅要手动选择bundle、framework进行真机和模拟器的打包。更加重要的是,如果这个包提供给别人用,你要提供两份?一份真机一份模拟器?这也太费劲了吧!

那么有没有合二为一的办法呢?

这个办法很多人都能找到,我随便翻个博客

你是说每次都让我这样去命令行合并?我觉得还是费劲!

好的吧~有个省事的办法,做个脚本吧!

拿出你创建好的SDK的工程。再添加一个Target

image.png

选择这个

image.png

这样添加一个脚本框

image.png

脚本中填写代码

image.png

代码语言:javascript
复制
# define output folder environment variable
CONFIGURATION=Release
UNIVERSAL_OUTPUTFOLDER=${SRCROOT}/${CONFIGURATION}-universal/${PROJECT_NAME}.framework
cd "${SRCROOT}/.."
#build support native API
# Step 1. Build Device and Simulator versions
xcodebuild -target MYResource ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

xcodebuild build -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

xcodebuild  build -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -configuration ${CONFIGURATION} -sdk iphonesimulator VALID_ARCHS="i386 x86_64" BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

# make sure the output directory exists
rm -rf "${SRCROOT}/${CONFIGURATION}-universal"
mkdir -p "${SRCROOT}/${CONFIGURATION}-universal"

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/" "${UNIVERSAL_OUTPUTFOLDER}/"

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/MYResource.bundle" "${SRCROOT}/${CONFIGURATION}-universal/"
rm -rf "${SRCROOT}/${CONFIGURATION}-universal/MYResource.bundle/MYResource"
rm -rf "${SRCROOT}/${CONFIGURATION}-universal/MYResource.bundle/Info.plist"


# Step 2. Create universal binary file using lipo
lipo -create "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}"  -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}"

open ${UNIVERSAL_OUTPUTFOLDER}

# Last touch. copy the header files. Just for convenience
  • 注意:修改代码中的MYResource.bundle这个名称。换成你的资源包的名字。

如果你使用的是Xcode10以后版本。需要做以下设置。

image.png

更改这个两个选项

image.png

选择脚本,build一次

image.png

有可能build失败了

image.png

导致这种情况的原因就是我们没有build一个releaseSDKResource,如果你之前已经build了这release版本,自然不会报错。

  • 如何处理? 我们有两个报错,直接修改两个包Scheme

image.png

image.png

修改完,选择选择这个Target编译一次

image.png

一个修改完成。第二个重复上面的操作,改过一定要编译一次!而且必须是成功的。

全部完成,如下图选择脚本,编译。

image.png

  • 看看成果:成功了,自动打开了一个文件夹

image.png

image.png

干了这么多事,还不是麻烦?

虽然我们现在很费事,但是以后我们修改了内容直接编译这个脚本就可以了。有错的话安装上面截图解决。是否一劳永逸了?

怎么知道你真的合包了?

我们来查下这个Framework的信息

image.png

  • 额~~脸被打的啪地一声....

别慌~如果你细心,你会发现,我们一直选择的这个Generic iOS Device编译的,从来没有使用模拟器编译过。

image.png

那么来一次吧!两个Target选个模拟器Build一次。

image.png

image.png

我保证,这次肯定稳了!不信你看~

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.01.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接上一篇iOS组件化(一)博客
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档