1.Alibaba App iOS工程架构腐化治理
2.iOSä¸äºå¸¸ç¨ç½ç«
3.iOS开发如何去掉某种类型的源码警告
4.HandyJSONç®å使ç¨
Alibaba App iOS工程架构腐化治理
前言
业务开发面对的环境问题日益增多,严重影响了开发效率。源码看似简单的源码打包问题背后,往往是源码工程架构的腐化。本文旨在探讨这一问题及其治理策略。源码
一、源码偷袭指标源码背景
近年来,源码随着iOS工程复杂度的源码提升,开发人员深受打包慢、源码复杂度高之苦。源码Alibaba.com的源码iOS客户端从年开始开发,年进行组件化改造,源码逐渐演变为一个大型工程,源码包含多个自维护模块。源码工程虽在表面上有序演进,源码但内部问题丛生,如循环依赖、反向依赖增多,模块不遵循LLVM Module标准,spec文件缺失,头文件引用混乱。运行graphhopper源码这些问题导致Cocoapods无法升级,工程技术滞后,每年浪费大量研发资源。
二、架构腐化问题
1. 模块打包复杂度高
- 工程环境混杂,存在反向依赖和循环依赖,导致模块单独打包困难。为解决此问题,开发了兼容脚本,使得模块编译通过,EAC拦截源码但spec文件维护变得松散,头文件引用更加混乱。
2. 主工程打包慢
- 模块不规范,需引用swift中间件,无法独立静态库,只能以源码形式集成,主工程因此需编译大量代码,打包时间显著增加。
3. 工程环境不稳定
- Cocoapods环境无法升级,限制了技术进步。lma指标源码模块解析主工程Podfile时的语法不兼容,导致构建失败,环境问题频繁出现。
4. Swift开发难题
- Swift模块严格遵守LLVM Modules规范,引入Swift开发面临巨大挑战。工程中大量Swift中间件和自研组件的引入,加剧了打包异常和开发效率降低。
5. 历史代码清理困难
- 旧业务下线后,模块间耦合严重,清理历史代码风险高,javaee实例源码导致包大小膨胀。
三、解决策略
1. 全面梳理和分析研发流程,量化工程混乱对效率的影响。
- 通过收集数据,识别关键问题,为治理提供依据。
2. 理清模块依赖关系,分层治理。
- 开发工具分析依赖,视觉化展示,按层次顺序治理,降低复杂度。
3. 自动化修复代码问题。
- 利用自动化工具修复依赖描述不全、头文件引用不规范等常见问题。
4. 架构和业务合作治理。
- 由架构组提供方案和工具,业务开发负责业务逻辑解耦,提高治理效率。
四、长效保障机制
1. 架构优化与收敛模块工程。
- 统一构建配置,减少维护成本和排查问题的难度。
2. 引入CocoaPod和Xcode编译卡口,Devops构建卡口,确保代码质量。
总结
架构腐化问题需通过全面分析、分层治理、自动化修复和架构业务合作解决。建立长效保障机制,优化架构和流程,预防二次腐化,是提升开发效率的关键。面对复杂度的挑战,技术团队与架构师应具备开发工具的能力,并寻求数据支持,推动架构治理的深入进行。
iOSä¸äºå¸¸ç¨ç½ç«
1.gooleå¼æº
blogs.com/wendingding/p/.html
5.FaceBook
.io
7.åå·§çææ¯å客
/s/blog_9c3cbfmz.html
.å客 loadViewãviewDidLoadåviewDidUnloadçå ³ç³»
blogs.com/ygm/p/.html
.ä½¿ç¨ Xcode å Instruments è°è¯è§£å³ iOS å åæ³é²
/mobiledev/.asp
.iOSå¼åä¸å¸¸è§çä¸äºbug
.io
.ViewControllerçåæ¢
/s/blog_4ca9ceefisvc.html
.iOS å¹³å° Cocos2d-x 项ç®æ¥å ¥æ°æµªå¾®å SDK çå
blogs.com/ios-wmm/
.èé¸ç¬è®°
blogs.com/hanyonglu/archive////.html
ã iOSå¼åå¤çº¿ç¨ç¯âå¤çº¿ç¨ç®åä»ç»
blogs.com/wendingding/p/.html
ãKVC ä¸ KVOç解
blogs.com/ios8/archive////ios-Singleton.html
. ä¸äºç¬¬ä¸æ¹åºçäºè§£
/thanklife/article/details/
iOS开发如何去掉某种类型的警告
最直接、最一劳永逸、最安全的方式,直接找到警告的那段代码,改为不警告。这个方式最安全。2. 使用编译器提供的宏来操作。这个方式在我们的工程中会大量的看到:
#pragma clang diagnostic push#pragma clang diagnostic ignored"-Wdeprecated-declarations" //写在这个中间的代码,都不会被编译器提示-Wdeprecated-declarations类型的警告dispatch_queue_tcurrentQueue =dispatch_get_current_queue();#pragma clang diagnostic pop这种方式的问题,同第一个差不多,也是要修改源代码的实现的,对于第三方,我们肯定是不想改动它的,尤其是一些更新很频繁的第三方,一般警告出现后不久,作者就更新了,我们在此做这样的操作,就显得浪费了.并且在 添加arm支持的时候,一下出现几百个某种类型的警告,改起来也是相当费时费力的啊!
3.关闭某一个指定文件的某种指定类型的警告 。 其实关闭某个指定文件的某种类型的警告很简单,就如同我们以前给某一个文件添加 ARC支持或者不支持的时候那样 添加 忽略/显示 某种类型警告 4.关闭工程中指定 类型的警告。还有关于我们使用cocoapod引入的第三方,我们可以在podfile文件中 增加一句 inhibit_all_warnings! 来要pod的工程不显示任何警告,例如:
link_with 'SecondHouseBrokerAPP','SecondHouseBrokerCOM'platform :ios,'6.0'inhibit_all_warnings!
pod 'SDWebImage'pod 'FMDB'pod 'GPUImage'
还有就是,上面的方法也适合其它类型的警告!!!HandyJSONç®å使ç¨
HandyJSON æ¯é¿éå¼åçä¸ä¸ªå¨swiftä¸æJSONæ°æ®è½¬å为对åºmodelçæ¡æ¶ãä¸å ¶ä»æµè¡çSwift JSONåºç¸æ¯ï¼HandyJSONçç¹ç¹æ¯ï¼å®æ¯æ纯swiftç±»ï¼ä½¿ç¨ä¹ç®åãå®ååºååæ¶(æJSON转æ¢ä¸ºModel)ä¸è¦æ±Modelä»NSObject继æ¿(å 为å®ä¸æ¯åºäºKVCæºå¶)ï¼ä¹ä¸è¦æ±ä½ 为Modelå®ä¹ä¸ä¸ªMappingå½æ°ãåªè¦ä½ å®ä¹å¥½Modelç±»ï¼å£°æå®æä»HandyJSONåè®®ï¼HandyJSONå°±è½èªè¡ä»¥å个å±æ§çå±æ§å为Keyï¼ä»JSON串ä¸è§£æå¼ãä¸è¿å 为HandyJSONæ¯åºäºswiftçmetadataæ¥åçï¼å¦æswiftçmetadataçç»ææ¹äºï¼HandyJSONå¯è½å°±ç´æ¥ä¸è½ç¨äºãå½ç¶é¿éä¸ç´å¨ç»´æ¤è¿ä¸ªæ¡æ¶ï¼swiftçæºç æååï¼ç¸ä¿¡æ¡æ¶ä¹æ¯ç¸å¯¹äºææ¹åçã githubå°å ã1ãå½ç¶æç®åçæ¹å¼ç¨cocoapodçæ¹å¼å¯¼å ¥å¦
2ãå¦æ使ç¨çæ¯Carthageï¼ä¹å¾ç®å
1ãç®åç解æï¼å æ¬modelä¸æjsonéä¸åå¨çï¼jsonä¸ä¹æmodeléä¸åå¨çå 容
2ãå å«å¯¹è±¡åµå¥ç解æ
3ãå å«æ°ç»å¯¹è±¡ç解æ
4ã æåå ¸è½¬æ对象
5ã å å«èªå®ä¹è§£æï¼å½modelçå±æ§ååjsonéç对åºä¸ä¸çæ¶åï¼modeléå®ç°mappingå½æ°å»å¯¹åºkeyã