Jonathan's Studio

iOS小记 :第一次开发完成经历

字数统计: 2.2k阅读时长: 7 min
2019/08/13

iOS小记 :第一次开发完成经历

    为什么要开始记小记了呢,还不是本人快要工作了,攒一些错误点,以防忘记,所以博客开始要更新一些个人见解了,勿喷,水平过低。

害羞

首先

​ 首先,本人上架了一款app,内容十分简单,如有什么建议还望各位多多反馈至邮箱😝。也感谢一些人的帮助,并非我一人占有这个app。

v7BgocRWesEGuhZ

关于这个软件的开发

​ 这个软件可以说是个人第一款上架的app,也是一番折腾后才实现的上架。虽然功能极其简单,没有什么拓展可言,并且是离线应用,但是上架也是走个流程,体验一下开发流程。

​ GitHub上库内的版本属于Demo,上架版本暂未公开,核心不变。

​ 在这里,我总结这个软件中,我开发的一些心得。

使用的编程语言

​ 从ObjectiveC开始学习,所以前段开发使用的ObjectiveC语言进行编程,使用给我的感受就是笼笼统统,正儿八经的代码书写,使用起来和C++大体一致。到后体学习了Swift语言之后,觉得swift语言虽然缺少了oc中一些传统的细节,但是在小规模开发中使用起来还是得心应手的。但是出于前段第三方框架的约束以及代码的庞大,重新写一遍有点费事,所以采用了混编模式 进行开发,这里说一下混编的一些利弊

OC与Swift混编

​ 当项目中出现需要使用Swift语言的情况还是存在,比如使用的第三方框架是Swift的,或者团队协作时队友使用了Swift需要和你的进行对接,这时,在避免重写的情况下,混编也不是不可以的。

​ 混编的教程网上都有,Xcode会自动提示你添加桥接文件 ,然后在桥接文件中添加在Swift使用的oc的头文件

#import "HomePage-Shop/AlertView/AddGoddsView/AddGoodsView.h"

这里给出详细路径自然是最好,在Build过程中也防止找不到头文件的问题(时常会有)

​ 如果你忘记自动添加了桥接文件,可以手动创建.h文件 ,格式为“项目名-Bridging-Header.h”,同时在Build Setting中添加头文件信息

TUzl9u6gYJLHxX7

​ 使用时,你会发现在Swift中使用oc代码,函数格式会稍许改变,这并不影响使用。同时,如果你使用第三方框架,即便是oc编写的,也可以在Swift文件中import,但是如果找不到,那就在桥接文件中添加。大部分能够使用,同样的函数格式会出现不相同,特殊情况下个别函数的返回参数在Swift中不能自动添加(Xcode没自动翻译的过来),会不太方便,所以最好使用同框架中Swift版本。

​ 那在此,我在oc中怎么调用Swift的代码呢。

​ 1、确保将框架 targetBuild Settings > Packaging > Defines Module 设置为 Yes

​ 2、将 Build setting 中的 Product Module Name 修改为工程名。

​ 之后的项目会自动生成swift的头文件头文件名称为Product Module Name-Swift.h (Product Module Name为工程名)

​ 3、然后只需在需要的oc文件中添加

#import "Flower-Swift.h"(Flower改为自己的工程名)

​ 就可以使用Swift代码了,这里说一下这个文件。这个文件由Xcode自动生成映射,里面包含了Swift文件中代码的oc版本。毕竟Swift特性是不需要用户import自定义Swift文件(Swift不同文件之间互通的意思),所以Flower-Swift.h包含了所有类的信息。

​ 但是如果你在oc文件中无法使用Swift的代码(除开私有),你就需要在Swift代码中添加**@objc** 来暴露给oc文件。

​ 用法说到这,好处也看到了,自动帮你翻译过来省事

开心

​ 但是,也看到了一些弊端。Flower-Swift.h文件包含了Swift代码的信息,但势必需要先Build然后才能使用,也就是说你更新了代码,需要先Build然后再在oc中使用,麻烦。

​ 其次,这样的操作,随着文件数增多,增加了编译的时间。同时,Swift中拥有OPtional Value的特性,在oc中没有,在翻译过程中,通常oc语言在Swift的体现为带有?的参数,在进行Swift书写势必会出现optional的判断是否一定存在该值,不符合Swift的优雅编程的思想。

​ 同时,当你在run的时候,oc语言一些在控制台输出可能也会有所影响,在断点的时候参数的print信息可能无法直接体现(因为swift无法判断当前带有?的值是否为该类型)。

​ 此外,打包过程中,生成的本地IPA文件会变得非常的大(我的app工程20多,打包100多),因为其中包含了SwiftSupport文件,但是上传到APP Store后体积会缩小到正常大小。

​ 注意的是,混编的项目,可能还涉及到动态编程问题,具体本人没怎么研究,所以百度下混编的更多资料避免踩坑。在release下无法进行Build具体也不清楚,我打包也是用的debug。(时间长了我也忘了,报错位置的确是在混编的桥接文件上,提示找不到对应文件)

凉凉

​ 所以,对于大工程项目,多人协作时,最好先确定使用什么样的语言,同时混编的问题也不大,协作下各自分工制作完善,整合的时候只是对接接口的话其实无伤大雅。

​ 好吧,说完这个问题,接下来说一下关于我在开发中的另一个选择。如何选择UI搭建的方式。

UI搭建的方式

​ 为什么要说这个呢,因为其中发生了一些事,我觉得让自己十分头疼。

​ 一开始,我使用的是StoryBoard进行界面的开发,因为是入门的一种方式,并且拖拽控件和自动布局很舒服,觉得开发前景一片光明。可是。当你不仅仅只是局限在简单的界面搭建,由于业务的增加以及更加复杂的逻辑,你不能很好的控制你的界面的时候,头疼之处就来了。

​ 很大层面上,StoryBoard并不是好的开发方式,其中还有一个更大的缺点在于他不是随着你的代码而更新。这么说把,如果iOS出现新的控件或者某个控件更新了属性什么的,特性显示在新的Xcode上,当你使用新的版本时,会出现不兼容的症状,此时,你就需要更改相对应的界面。在这里,有一个血的教训,由于本人电脑问题重装了,并且没有及时上传私有库,导致了之前的版本丢失,这倒没事,现在的版本在。为了适配iOS13,当下载新的beta版本,打开了StoryBoard继续项目。

​ 好了,悲剧来了。由于beta不能打包以及上传App Store(你只能使用正式版进行打包和上传,否则审核被拒,同样的理由,不能使用beta版发布),我只好回到正式版。然而StoryBoard不能打开了,提示打开失败,因为新的版本的cell contentView有了变化,旧版本不能用。好了,这下子就什么都没了。

哭了

​ 即便你寻找到网上的方法,在源码中删除了特性的警告活着更改了故事版的版本属性,但是由于beta版本自动更改了contentView,正式版本还是不能用的,因为不存在这样的代码。有备份的还好,没得的就是重做了,呜呜呜、

​ 所以,我个人之前会使用xib+代码的形式进行界面开发,但是纯代码的方式我也更加推荐。

​  xib+代码的形式比纯代码更具有效率,比如cell的UI使用xib,这样直观明了。本人在xib+代码使用后,渐渐过渡到纯代码的开发,因为还要考虑性能的问题,纯代码的书写会让你的思路更加清楚(前提是命名要规范),其次,像一些最底层的view有时你需要贴合屏幕底部的约束使用代码形式会比较明了,也推荐使用masonry这样的优秀框架帮助你的约束。

        

​ 这次小记就到这啦~ 过段日子再写 :)

CATALOG
  1. 1. iOS小记 :第一次开发完成经历
    1. 1.1. 首先
    2. 1.2. 关于这个软件的开发
    3. 1.3. 使用的编程语言
      1. 1.3.0.1. OC与Swift混编
  2. 1.4. UI搭建的方式