首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS组件化(二)

iOS组件化(二)

作者头像
Raindew
发布于 2019-01-28 03:16:47
发布于 2019-01-28 03:16:47
68300
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

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

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

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

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

image.png

选择这个

image.png

这样添加一个脚本框

image.png

脚本中填写代码

image.png

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何设计编写一个 SDK
App 的开发更偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而 SDK 面向的是开发者,开发更偏向于功能方面,注重功能的开发实现。不妨来看看 FinClip 移动端工程师整理的如何编写一个 SDK,还是很有参考价值。
Onegun
2021/12/15
1.5K0
如何设计编写一个 SDK
ios SDK如何配置
以上步骤就完成了,下边就是 Commond'+B 编译, 用模拟器编译就是 模拟器的 framework 用真机编译 就是真机的 framework
用户1219438
2020/08/19
1K0
ios SDK如何配置
Xcode 9 制作 iOS 通用 Framework创建 Framework模拟器和真机通用 FrameworkBundle使用 Framework
创建 Framework ---- [站外图片上传中...(image-1683fa-1522307699684)] 设置 添加 .h .m .swift 文件 [站外图片上传中...(image-e8e572-1522307699684)] // // RWUIControlsFramework.h // RWUIControlsFramework // // Created by iOS Dev Log on 2018/3/28. // Copyright © 2018年 iOSDevLog.
iOSDevLog
2018/05/17
1.7K0
如何封装自己的 iOS Framework 静态库
像工作中使用的第三方SDK基本上都是闭源的,因为公司不能把自己的机密泄露出去。所以当需要给别人提供SDK但不让他们知道代码的实现时就需要封装成静态库。
零式的天空
2022/03/22
7950
iOS中制作可复用的框架Framework 原
        在iOS开发中,我们时常会使用一些我们封装好的管理类,框架类,方法类等,我们在实现这些文件时,可能还会依赖一些第三方库或者系统库。如果每次我们复用这些代码时,都要将关联的这些东西进行导入,甚至还要进行arc和mrc的编译设置,会浪费我们很大的精力。除此之外,如果项目需要多人合作,你可能也并不希望你的源代码暴漏在所有人的面前,这个时候,我们就可以使用静态库或者动态库的方式来对我们的代码进行包装,便于复用。静态库的制作方法在一篇旧的博客中有描述:http://my.oschina.net/u/2340880/blog/398887。相比静态库文件,动态库的效率会更高且封装性更好,这里主要讨论动态库的制作。
珲少
2018/08/16
6410
iOS中制作可复用的框架Framework
                                                                            原
iOS里的动态库和静态库
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝(图1所示)
且行且珍惜_iOS
2022/05/13
3.2K0
iOS里的动态库和静态库
iOS (动态库,静态库) 的制作,使用及遇到的问题
去年接的一个私活,制作SDK给其它游戏厂家使用,功能很简单就是集成 登录,注册,支付等功能。当初抵挡不住金钱的诱惑,对于从没做过SDK的我竟有莫名的勇气接了下来,边学边做,一周时间完成,几乎没有测试,但介入游戏项目时,一个又一个的坑暴露了出来,填完坑之后,决定一定要记录下来,方便以后自己和有需要的人查阅。
honey缘木鱼
2019/06/14
7.4K0
【IOS开发进阶系列】Framework制作专题
http://blog.csdn.net/yongyinmg/article/details/41513917
江中散人_Jun
2023/10/16
7180
【IOS开发进阶系列】Framework制作专题
有赞 Flutter 混编方案
目前准备试水 Flutter,但是多数 native 开发是不了解 Flutter,因此需要设计一种比较“舒服”的集成方式。
有赞coder
2020/08/25
1.8K0
有赞 Flutter 混编方案
工程化(一)——Xcode工程探究
如果我们是通过 CocoaPods 引入第三方,那么在命令行执行 pod install 之后,查看项目目录就可以看到多了一个 xcworkspace 文件,如下:
拉维
2023/03/09
3.5K1
工程化(一)——Xcode工程探究
MonoTouch绑定CocoaTouch类库
在 Windows/Linux 平台上, .Net/Mono 可以通过平台调用 (P/Invoke) 技术调用本地类库, 通过互操作 (Interop) 技术调用 COM 组件, 在 iOS 平台上, MonoTouch 也有类似的技术, 可以调用 iOS 的 CocoaTouch 类库, 这种技术在 MonoTouch 叫做绑定 (Binding) , 整个 monotouch.dll 就是用绑定技术完成的。
beginor
2020/08/10
5590
MonoTouch绑定CocoaTouch类库
Flutter iOS 混合工程自动化
Flutter提供的混编方案直接依赖于Flutter工程和Flutter环境,非Flutte团队成员无法脱离Flutter环境进行开发,团队合作成本加重。
conanma
2022/01/10
1.8K0
【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库
编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了下 Luajit 库的编译经验,供以后查阅。网上的讨论也是有一些,但是相当一部分都已经过时。或许等你看到这篇文章的时候,可能也只是能获得一些可能的经验来解决自己的编译问题。所以说,了解一些基本的编译知识,能勉强看懂 Luajit 的 make 文件,还是很有必要的。本篇是关于 Luajit 静态库的,如果你想找的是如何编译适用于移动端的 Luajit 字节码,可以直接看 【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录。
ios122
2018/07/31
2.7K0
jenkins 之 iOS 打包及上传至蒲公英
2. 源码管理,使用 账号 和 密码拉取代码(有可能会提示无法获取,你可以重启 jenkins 试试,如果还不行,重启电脑,如果还不行,自行解决)
卓越笔记
2023/02/17
2.5K0
jenkins 之 iOS 打包及上传至蒲公英
xcodebuild:从命令行部署 iOS 应用程序
作者:Shashikant Jagtap 时间:2017 年 6 月 4 日 原文:https://medium.com/xcblog/xcodebuild-deploy-ios-app-from-command-line-c6defff0d8b8
iOSDevLog
2019/05/09
2.8K0
xcodebuild:从命令行部署 iOS 应用程序
手把手教你利用Jenkins持续集成iOS项目
众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一批的用户在使用中纷纷出现闪退bug,轻则,很可能前期推广砸的钱都白费了,重则,口碑不好,未来也提升不起用户量来了。静下心来分析一下问题的原因,无外乎就是质量没有过关就上线了。除去主观的一些因素,很大部分的客观因素我觉得可以被我们防范的。根据大神们提出的一套开发规范建议,CI + FDD,就可以帮助我们极大程度的解决客观因素。本文接下来主要讨论 Continuous Integration 持续集成(简称CI)
一缕殇流化隐半边冰霜
2018/08/29
1.7K0
手把手教你利用Jenkins持续集成iOS项目
代码管理| 手把手教你封装自己的静态库SDK
这里重点说下,怎样饮用Bundle中的图片资源。这里使用的是简写:@"JWJFramework.bundle/open"其中JWJFramework.bundle是Bundle的名称。
進无尽
2018/09/12
1.6K0
代码管理| 手把手教你封装自己的静态库SDK
如何通过静态分析提高iOS代码质量
随着项目的扩大,依靠人工codereview来保证项目的质量,越来越不现实,这时就有必要借助于一种自动化的代码审查工具:**程序静态分析**。
会写bug的程序员
2020/05/26
2.4K0
如何通过静态分析提高iOS代码质量
将 iOS 应用体积缩小一半的秘籍:妥善运用动态框架
每个开发新手,在编写软件前都听说过这样一条原则:“别自我重复”。但 App Store 上不少体量最大的 iOS 应用却仍在犯下同样的致命错误:不必要地照搬整个模块。
深度学习与Python
2024/04/12
6170
将 iOS 应用体积缩小一半的秘籍:妥善运用动态框架
IOS 代码扫描从放弃到入门
我司今年开始尝试一些代码质量相关建设,比如组织 codereview、修复代码扫描漏洞.这是一个很好的现象,当我们为了快速迭代,往往为了让需求上线,导致代码并不是很规范,时间长了就留下了一堆技术债.
高楼Zee
2021/09/23
3.5K0
IOS 代码扫描从放弃到入门
推荐阅读
相关推荐
如何设计编写一个 SDK
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档