阿伟先生 發表於 2024-1-3 19:38:00

iOS SDK开发流程

<div data-version="3.0.0" data-hash="0a13e7136c4ae2583a5d769987455a3d">&nbsp;</div>
<div class="document">
<div class="section">
<h2 class="paragraph text-align-type-left tco-title-heading 2"><span data-font-family="等线">项目开展</span></h2>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="default">1、框架搭建:</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="等线">SDK库搭建,本地静态库搭建、远端Pod库搭建。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">数据传输底层封装。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">统一调用类,回调给外部使用接口、方法名、数据类型定义、数据处理。<span data-font-family="等线">&nbsp;</span></span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="default">2、业务分组:</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="等线">账户信息<span data-font-family="等线">、<span data-font-family="等线">绑定。</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">设备管理<span data-font-family="等线">、功能<span data-font-family="等线">。</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">业务<span data-font-family="等线">扩展<span data-font-family="等线">。</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="default">3、提前准备事项</span></h3>
<h5 class="paragraph text-align-type-left tco-title-heading 5"><span data-font-family="default">1)SDK的名称&nbsp;___________</span></h5>
<p class="paragraph text-align-type-left"><span data-font-family="等线"> <span data-font-family="等线">萤石(EZOpenSDK),涂鸦(ThingSmartSDK),阿里(IMSIotSmart)</span></span></p>
<h5 class="paragraph text-align-type-left tco-title-heading 5"><span data-font-family="default">2)SVN本地代码仓库文件地址创建。</span></h5>
<h5 class="paragraph text-align-type-left tco-title-heading 5"><span data-font-family="default">3)托管账户(提供注册邮箱)</span></h5>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;&nbsp;&nbsp;&nbsp;因为墙的缘故,考虑是否用github。目前参考的几家都是GIthub,Coding、GitHub、Gitee、Gitlab都是代码托管,规则基本相同。不影响pod库的创建。</span></p>
<h5 class="paragraph text-align-type-left tco-title-heading 5"><span data-font-family="default">4)对于企业用户选择GitHub还是GitLab</span></h5>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑"> <span data-font-family="微软雅黑"> <span data-font-family="微软雅黑">选择在GitHub还是GitLab上开发三方库取决于各种因素,包括个人偏好、项目需求和团队要求。</span></span></span></p>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下是一些比较关键的因素:</span></h6>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">a、社区和流行度:</span></h6>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">GitHub是全球最大的开源代码托管平台之一,拥有庞大的开发者社区。在GitHub上发布你的三方库可能会更容易引起关注和贡献。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">GitLab也是一家受欢迎的平台,尤其在一些企业和组织中使用较多。它提供了完整的DevOps工具链,适用于一体化的开发和部署流程。</span></p>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">b、功能和集成:</span></h6>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">GitLab提供了更广泛的集成,包括CI/CD、代码审查、容器注册表等,这使得它成为一种更全面的解决方案,特别是对于需要集成DevOps工具链的项目。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">GitHub也提供了CI/CD工具,但GitLab的集成可能更为紧密。</span></p>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">c、私有仓库:</span></h6>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">GitLab允许免费创建私有仓库,而GitHub通常需要订阅付费计划以获得相同的功能。如果你的项目需要私有存储库,GitLab可能更具吸引力。</span></p>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">d、地理位置:</span></h6>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">GitHub在全球范围内都有快速的访问,但如果你的团队或用户主要在中国,GitLab可能因其在中国的镜像站点而更为受欢迎。</span></p>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">e、安全性和合规性:</span></h6>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">如果你的项目需要更高级的安全性和合规性,GitLab可能更适合,因为它提供了更多关于安全性和合规性的功能。</span></p>
<h6 class="paragraph text-align-type-left tco-title-heading 6"><span data-font-family="default">f、自托管:</span></h6>
<p class="paragraph text-align-type-left"><span data-font-family="微软雅黑">如果你更喜欢自托管你的代码仓库,GitLab可能是更好的选择,因为它提供了一个免费的自托管版本。</span></p>
<p class="paragraph text-align-type-left">&nbsp;</p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="default">4、pod信息</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;这是默认的,不用改<span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;版本号,输入你准备的版本号,可以不用改</span></span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">summary&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;简介,最好写一个,不改后面会有警告</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">description&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;详细说明,可写可不写。</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">homepage&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;依赖库的介绍页的地址,随便放,没要求</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">license&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;不用改</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;作者信息</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span data-font-family="Consolas">//&nbsp;远端依赖库的地址,下一步我们就会创建远端地址。不能写错</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">ios<span data-font-family="Consolas">.<span data-font-family="Consolas">deployment_target&nbsp;<span data-font-family="Consolas">=<span data-font-family="Consolas"> <span data-font-family="Consolas">'10.0'<span data-font-family="Consolas"> <span data-font-family="Consolas">//&nbsp;依赖库支持的最低iOS系统版本现在基本都是10.0了</span></span></span></span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">source_files&nbsp;<span data-font-family="Consolas">//&nbsp;引用库的文件目录,不用改</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">resource_bundles&nbsp;<span data-font-family="Consolas">//&nbsp;依赖库如果需要icon的话,要打开</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">frameworks&nbsp;<span data-font-family="Consolas">//&nbsp;用到的系统框架</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">s<span data-font-family="Consolas">.<span data-font-family="Consolas">dependency&nbsp;<span data-font-family="Consolas">//用到的第三方的依赖库,用到多个的话就写多个,OC一般问题不大,Swift问题会多一点,swift库支持的版本不稳定导致的。</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h2 class="paragraph text-align-type-left tco-title-heading 2"><span data-font-family="等线">一、SDK命名规范</span></h2>
<p class="paragraph text-align-type-left"><span data-font-family="等线">sdk名称:<span data-font-family="等线">XJH<span data-font-family="等线">Engine</span></span></span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">1、文件命名</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="等线">framework:&nbsp;<span data-font-family="等线">XJH<span data-font-family="等线">...SDK</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">file:<span data-font-family="等线">XJH<span data-font-family="等线">...</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">2、方法命名</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="等线">.h:<span data-font-family="等线">XJH<span data-font-family="等线">_开头;外部方法大写</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">.m:<span data-font-family="等线">xjh<span data-font-family="等线">_开头;内部函数使用小写</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">方法回调:<span data-font-family="等线">XJH<span data-font-family="等线">_resp开头</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">例:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">开始播放</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">XJH<span data-font-family="等线">_startPlay:(Camera&nbsp;*)&nbsp;dev</span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">回调:<span data-font-family="等线">XJH<span data-font-family="等线">_respPlayState:</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">截图</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">XJH<span data-font-family="等线">_screenShot</span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">回调:<span data-font-family="等线">XJH<span data-font-family="等线">_respScreenShot:</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">3、其他命名</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="等线">XJH_typeS<span data-font-family="等线">cope_Subject</span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">XJH_业务类型+使用范围_内容描述</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">业务类型:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">Account+Login、Register</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">Live+Connect、Ptz、Audio</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">Message+</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">Set+</span></p>
<p class="paragraph text-align-type-left">&nbsp;</p>
<h4 class="paragraph text-align-type-left tco-title-heading 4"><span data-font-family="等线">&nbsp;<span data-font-family="等线">错误代码&nbsp;(推荐使用枚举)按范围区分枚举<span data-font-family="等线">&nbsp;</span></span></span></h4>
<h4 class="paragraph text-align-type-left tco-title-heading 4"><span data-font-family="等线">枚举命名</span></h4>
<p class="paragraph text-align-type-left"><span data-font-family="等线">例:枚举<span data-font-family="等线">使用位运算,节省内存空间,提高运算</span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">///&nbsp;&nbsp;直播中云台方向控制</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">typedef&nbsp;NS_OPTIONS(NSUInteger,&nbsp;XJH_LivePtzDirection)&nbsp;{</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;&nbsp;&nbsp;&nbsp;XJH_LivePtzDirection_UP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;&nbsp;&nbsp;&nbsp;XJH_LivePtzDirection_BOTTOM&nbsp;&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;2</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;&nbsp;&nbsp;&nbsp;XJH_LivePtzDirection_LEFT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;2,&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;4</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;&nbsp;&nbsp;&nbsp;XJH_LivePtzDirection_RIGHT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;3,&nbsp;&nbsp;//&nbsp;8</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;&nbsp;&nbsp;&nbsp;XJH_LivePtzDirection_STOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1&nbsp;&lt;&lt;&nbsp;4&nbsp;&nbsp;//&nbsp;16</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">};</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<h4 class="paragraph text-align-type-left tco-title-heading 4"><span data-font-family="等线">日志打印</span></h4>
<p class="paragraph text-align-type-left"><span data-font-family="等线">例:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">NSLog(@"<span data-font-family="等线">XJH<span data-font-family="等线">LivePtzDirection-StarUP“);</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">NSLog(@"<span data-font-family="等线">XJH<span data-font-family="等线">LivePtzDirection-StopUP“);</span></span></span></p>
<p class="paragraph text-align-type-left">&nbsp;</p>
<h2 class="paragraph text-align-type-left tco-title-heading 2"><span data-font-family="等线">二、业务划分</span></h2>
<p class="paragraph text-align-type-left"><span data-font-family="等线">跟进自己的业务模块来<span data-font-family="等线">&nbsp;</span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<h2 class="paragraph text-align-type-left tco-title-heading 2"><span data-font-family="default">三、远端库制作</span></h2>
<p class="paragraph text-align-type-left"><span data-font-family="等线">软件开源许可证-CSDN博客</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">iOS&nbsp;&nbsp;静态库&nbsp;-&nbsp;简书</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">iOS&nbsp;制作CocoaPods依赖库&nbsp;-&nbsp;简书</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">iOS组件化开发流程</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="等线">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">1、制作三方库步骤</span></h3>
<h4 class="paragraph text-align-type-left tco-title-heading 4"><span data-font-family="等线">&nbsp;1、大致步骤</span></h4>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">制作一个支持CocoaPods依赖库共需要四个仓库:&nbsp;远端仓库&nbsp;本地仓库&nbsp;远端索引库&nbsp;本地索引库&nbsp;&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">其中本地仓库用来测试及调整源码,远端仓库用来保存本地仓库的所有文件,远端索引库用来支持CocoaPods安装,本地索引库用来和远端索引库进行绑定,并把本地仓库的.podspec文件推送到远端索引库。&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">源码的每次变动都必须要打tag标签,并且推送tag的时候必须和.podspec文件中的version一致。&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">只要远端仓库和远端索引库存在,可以随时随地维护自己的依赖库。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h4 class="paragraph text-align-type-left tco-title-heading 4"><span data-font-family="等线">2、步骤总结:</span></h4>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">1、创建本地代码库:pod&nbsp;lib&nbsp;create&nbsp;仓库名</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">2、创建远端代码库,拿到远端代码库git地址,回到本地代码库目录下打开<span data-font-family="Consolas">.<span data-font-family="Consolas">podspec文件替换掉source地址和homepage地址,修改summary内容</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">3、cd到Example目录下,更新本地代码库:pod&nbsp;update&nbsp;<span data-font-family="Consolas">--<span data-font-family="Consolas">no<span data-font-family="Consolas">-<span data-font-family="Consolas">repo<span data-font-family="Consolas">-<span data-font-family="Consolas">update(此步骤可跳过)</span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">4、cd到本地代码库目录下,验证:pod&nbsp;lib&nbsp;lint&nbsp;<span data-font-family="Consolas">--<span data-font-family="Consolas">allow<span data-font-family="Consolas">-<span data-font-family="Consolas">warnings</span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">5、将本地代码库推送到远端代码库并打标签(tag标签版本号和<span data-font-family="Consolas">.<span data-font-family="Consolas">podspec中版本号一致)&nbsp;</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">git&nbsp;remote&nbsp;add&nbsp;origin&nbsp;远端代码库git地址&nbsp;&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">git&nbsp;add<span data-font-family="Consolas">.<span data-font-family="Consolas">git&nbsp;commit<span data-font-family="Consolas">-<span data-font-family="Consolas">m&nbsp;<span data-font-family="Consolas">'commit'</span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">git&nbsp;pull&nbsp;origin&nbsp;master(新仓库推送代码,此步骤可跳过)&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">git&nbsp;push<span data-font-family="Consolas">--<span data-font-family="Consolas">force&nbsp;远端代码库git地址(强制推送合并代码)&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">git&nbsp;tag<span data-font-family="Consolas">0.0.1<span data-font-family="Consolas">git&nbsp;push&nbsp;origin<span data-font-family="Consolas">0.0.1</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">6、创建远端索引库</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">7、重新打开终端或cd&nbsp;<span data-font-family="Consolas">~<span data-font-family="Consolas">,创建本地索引库:pod&nbsp;repo&nbsp;add&nbsp;本地索引库名&nbsp;远端索引库git地址</span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">8、验证本地索引库:pod&nbsp;repo(或直接查看本地索引库是否创建成功:~<span data-font-family="Consolas">/<span data-font-family="Consolas">.<span data-font-family="Consolas">cocoapods<span data-font-family="Consolas">/<span data-font-family="Consolas">repos)</span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">9、cd到本地代码库目录,将本地代码库的<span data-font-family="Consolas">.<span data-font-family="Consolas">podspec文件和索引库邦的:pod&nbsp;repo&nbsp;push&nbsp;索引库名&nbsp;本地代码库<span data-font-family="Consolas">.<span data-font-family="Consolas">podspec&nbsp;<span data-font-family="Consolas">--<span data-font-family="Consolas">allow<span data-font-family="Consolas">-<span data-font-family="Consolas">warnings</span></span></span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">10、在Demo项目中,pod引入组件库&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">指定分支:pod<span data-font-family="Consolas">'代码库名'<span data-font-family="Consolas">,<span data-font-family="Consolas"> <span data-font-family="Consolas">:<span data-font-family="Consolas">git&nbsp;<span data-font-family="Consolas">=&gt;<span data-font-family="Consolas"> <span data-font-family="Consolas">'代码库git地址'<span data-font-family="Consolas">,<span data-font-family="Consolas"> <span data-font-family="Consolas">:<span data-font-family="Consolas">branch&nbsp;<span data-font-family="Consolas">=&gt;<span data-font-family="Consolas"> <span data-font-family="Consolas">'master'</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">指定commit:pod<span data-font-family="Consolas">'代码库名'<span data-font-family="Consolas">,<span data-font-family="Consolas"> <span data-font-family="Consolas">:<span data-font-family="Consolas">git&nbsp;<span data-font-family="Consolas">=&gt;<span data-font-family="Consolas"> <span data-font-family="Consolas">'代码库git地址'<span data-font-family="Consolas">,<span data-font-family="Consolas"> <span data-font-family="Consolas">:<span data-font-family="Consolas">commit&nbsp;<span data-font-family="Consolas">=&gt;<span data-font-family="Consolas"> <span data-font-family="Consolas">'******'</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">可将代码库本地引入,修改代码库中源码:clone代码库到Demo项目同级目录,podfile文件改为:pod<span data-font-family="Consolas">'代码库名'<span data-font-family="Consolas">,<span data-font-family="Consolas"> <span data-font-family="Consolas">:<span data-font-family="Consolas">path&nbsp;<span data-font-family="Consolas">=&gt;<span data-font-family="Consolas"> <span data-font-family="Consolas">'../代码库名'</span></span></span></span></span></span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">11、创建远端代码库和索引库时,保证仓库中有文件存在,避免push不成功</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">12、查看你的注册信息&nbsp;&nbsp;pod&nbsp;trunk&nbsp;me</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">13、注册cocoapods账号:&nbsp;pod&nbsp;trunk&nbsp;register&nbsp;<span data-font-family="Consolas">'git邮箱'<span data-font-family="Consolas"> <span data-font-family="Consolas">'git用户名'</span></span></span></span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">2、动态库的制作和静态库的区别</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库(Dynamic&nbsp;Library)和静态库(Static&nbsp;Library)是两种库的不同形式,它们在制作、使用和链接方式上有一些区别。以下是动态库和静态库之间的一些主要区别:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">1.&nbsp;库的定义:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库是在运行时加载到内存的库。它的代码在应用程序运行时被动态地链接到应用程序中。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库是在编译时链接到应用程序的库。它的代码在编译时就被复制并链接到应用程序的可执行文件中。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">2.&nbsp;文件格式:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;在大多数操作系统中,动态库通常以共享对象文件(Shared&nbsp;Object,通常是.so或.dylib)的形式存在。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库以归档文件(Archive,通常是.a)的形式存在。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">3.&nbsp;加载时机:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库在应用程序运行时动态加载到内存。加载发生在应用程序启动时,或者在需要使用动态库的时候。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库在编译时被链接到应用程序,因此它的代码在应用程序启动时已经存在。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">4.&nbsp;文件体积:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库通常比静态库小,因为它们可以在多个应用程序之间共享。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库会增加应用程序的大小,因为它们的代码被复制到每个应用程序中。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">5.&nbsp;运行时更新:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库可以在运行时更新,应用程序可以加载新的库版本而无需重新编译。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库的更新需要重新编译应用程序,因为库的代码被静态地复制到应用程序中。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">6.&nbsp;共享性:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库可以被多个应用程序共享,减少了内存占用。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库的每个应用程序都有其自己的库副本,可能导致内存占用增加。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">7.&nbsp;链接方式:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库在链接时(编译或运行时)不会与应用程序的代码进行完全的静态链接。相反,只有在运行时才进行动态链接。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库在链接时会完全地被复制并链接到应用程序中,生成一个完整的可执行文件。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">8.&nbsp;运行环境要求:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库需要在运行环境中找到,否则应用程序将无法启动或执行。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库的代码被完全复制到应用程序中,因此不需要在运行时查找外部库。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">9.&nbsp;加载速度:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库:&nbsp;动态库的加载发生在运行时,可能会引入一些额外的启动时间。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库:&nbsp;静态库的加载是在编译时完成的,不会增加应用程序的启动时间。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">3、制作二进制框架的库通常包括以下步骤:</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">创建动态库或静态库:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在&nbsp;Xcode&nbsp;中,创建一个新的&nbsp;Framework&nbsp;项目。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在项目中添加源代码、资源文件以及其他所需的文件。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">选择库的类型:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库(Dynamic&nbsp;Library):拓展名为&nbsp;.framework,在运行时加载。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库(Static&nbsp;Library):拓展名为&nbsp;.a,在编译时链接到主应用程序。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">配置构建设置:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">配置构建设置以生成适当类型的库(动态库或静态库)。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">确保设置适当的目标架构和编译选项。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">构建库:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在&nbsp;Xcode&nbsp;中,选择对应的&nbsp;Scheme,并使用&nbsp;"Build"&nbsp;命令构建你的库。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">打包库:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">将生成的库文件(.framework&nbsp;或&nbsp;.a)放入适当的文件夹中。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">如果是动态库,确保它包含所需的头文件和资源。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">创建&nbsp;Podspec&nbsp;文件:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在项目目录下创建一个名为&nbsp;YourLibrary.podspec&nbsp;的文件,定义你的库的元数据,如名称、版本、依赖关系等。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">rubyCopy&nbsp;code</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">Pod::Spec.new&nbsp;do&nbsp;|s|&nbsp;&nbsp;&nbsp;s.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;='YourLibrary's.version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;='1.0.0's.summary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;='A&nbsp;brief&nbsp;description&nbsp;of&nbsp;YourLibrary.'#&nbsp;...&nbsp;其他元数据&nbsp;...s.source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;{:git&nbsp;=&gt;&nbsp;'https://github.com/your_username/YourLibrary.git',&nbsp;:tag=&gt;&nbsp;s.version.to_s&nbsp;}&nbsp;&nbsp;&nbsp;s.source_files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;='YourLibrary/**/*.h's.vendored_frameworks&nbsp;='YourLibrary/YourLibrary.framework'end</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">注意&nbsp;vendored_frameworks&nbsp;字段的设置,用于指定库文件的位置。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">验证&nbsp;Podspec&nbsp;文件:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在终端中运行&nbsp;pod&nbsp;spec&nbsp;lint&nbsp;YourLibrary.podspec&nbsp;验证&nbsp;Podspec&nbsp;文件。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">发布到仓库:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">将你的库的源代码和&nbsp;Podspec&nbsp;文件推送到远程版本控制系统,如&nbsp;GitHub。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">注册并发布到&nbsp;CocoaPods&nbsp;仓库,可以使用&nbsp;pod&nbsp;trunk&nbsp;push&nbsp;YourLibrary.podspec。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">其他开发者就可以通过&nbsp;CocoaPods&nbsp;引用你的库,使用&nbsp;pod&nbsp;'YourLibrary'&nbsp;来集成你的二进制库到他们的项目中。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">请注意,制作二进制库需要谨慎,因为一些开源许可证可能要求你公开源代码。确保遵守所有相关法规和许可证,并在&nbsp;Podspec&nbsp;文件中适当地指明许可证信息。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">4、选择使用静态库还是动态库</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">取决于你的项目需求、应用场景以及个人或团队的偏好。每种类型都有其优势和劣势,以下是一些考虑因素:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库(Static&nbsp;Library):</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">优势:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">易于集成:&nbsp;静态库直接被编译进应用程序中,使得集成过程相对简单。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">依赖管理:&nbsp;所有的依赖都包含在库中,减少了在应用程序中引入不同版本库的复杂性。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">稳定性:&nbsp;库的版本一旦发布,它的接口和行为就不会轻易变化,提供了相对的稳定性。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">适用于嵌入式系统:&nbsp;静态库适用于一些嵌入式或移动设备,因为它们不需要在运行时加载。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">劣势:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">体积增大:&nbsp;每个应用程序都包含库的完整拷贝,可能导致应用程序体积较大。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">更新困难:&nbsp;如果库的更新,应用程序需要重新编译以使用新版本。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">动态库(Dynamic&nbsp;Library):</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">优势:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">共享:&nbsp;动态库可以在运行时共享,多个应用程序可以共用同一份库,减少了内存占用。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">更新简便:&nbsp;库的更新不需要重新编译应用程序,只需替换库文件。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">灵活性:&nbsp;库可以在运行时加载和卸载,提供了更大的灵活性。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">劣势:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">依赖管理:&nbsp;应用程序需要确保系统上存在所需的动态库版本,可能会导致一些依赖问题。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">版本兼容性:&nbsp;动态库的版本兼容性需要更加小心,因为应用程序和库可能在不同的时间和地点被编译。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">部署复杂性:&nbsp;一些平台或商店可能对动态库的部署有一些限制。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">综合考虑:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">如果你希望简化集成过程、减小应用程序体积,并且对库的稳定性有较高的要求,可以选择使用静态库。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">如果你追求灵活性、共享库、并希望简化库的更新过程,可以选择使用动态库。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在某些情况下,也可以选择混合使用静态库和动态库,根据具体情况决定。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="等线">5、处理项目中多个库应用同一个库的不同版本(首选动态库)</span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;&nbsp;&nbsp;需要仔细规划和协调,以确保不同版本的库能够和各个库应用协同工作。以下是一些建议:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">依赖管理工具的版本约束:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">使用现代的依赖管理工具,如&nbsp;CocoaPods、Carthage&nbsp;或&nbsp;npm,它们都支持版本约束。在每个库应用的依赖配置中,可以指定对于共享库的版本范围,以确保不同的库应用使用的版本不会发生冲突。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">例如,对于&nbsp;CocoaPods,可以使用如下方式指定版本范围:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">rubyCopy&nbsp;code</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">pod&nbsp;'SharedLibrary',&nbsp;'~&gt;&nbsp;1.0'</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">这表示使用&nbsp;1.x.x&nbsp;系列的版本。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">使用不同的命名空间或模块:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">如果语言支持命名空间或模块系统,将不同版本的库放置在不同的命名空间或模块中,以防止命名冲突。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态链接或动态库的选择:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">静态库和动态库对于版本管理有不同的影响。静态库将依赖项嵌入到应用程序中,可能导致冲突,而动态库则允许共享库的不同版本。考虑选择适合你项目需求的方式。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">通过编译选项区分版本:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">在编译时通过预处理宏或其他编译选项来区分不同版本的库。这样,可以在不同版本的库中使用条件编译,以适应不同的应用场景。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">协调升级策略:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">如果需要升级共享库的版本,确保所有使用这个库的库应用都经过了测试,并且能够适应新版本的变化。在升级时,可以通过逐步迁移的方式,先更新一个库应用,验证稳定性后再逐步更新其他应用。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">定期同步:</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">定期同步库应用的版本,以确保它们使用的共享库版本保持一致。可以通过定期的代码审查、版本控制工具的合并等方式来实现。</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<p class="paragraph text-align-type-left"><span data-font-family="Consolas">&nbsp;</span></p>
<h3 class="paragraph text-align-type-left tco-title-heading 3"><span data-font-family="Consolas">&nbsp;<span data-font-family="等线">iOS12-14版本变化问题解决方案</span></span></h3>
<p class="paragraph text-align-type-left"><span data-font-family="等线">iOS&nbsp;版本适配-文档中心半公开文档-涂鸦开发者</span></p>
</div>
</div><br><br>
来源:https://www.cnblogs.com/xujiahui/p/17943895
頁: [1]
查看完整版本: iOS SDK开发流程