对iOS开发有用的一些自动化处理脚本

简介:

最近编写了两个辅助iOS开发的脚本,用于一些自动化处理。

简介


objective-c 方法名格式化器

由于工作有些变动的原因,之前一段时间开发iOS时是在21寸的iMac屏幕上开发,现在自己买了macbook pro之后就在自己的笔记本上开发(其实之前更早的时候我是在19寸的黑苹果显示器下开发)。这样的屏幕尺寸变化,导致一些基于原来屏幕尺寸的代码缩进、换行在另一个屏幕上看起来显得异常混乱。

了解obj-c语法的人都知道,它的方法定义语法导致了它有时看起来比其他语言的方法签名要长得多。这样在那种13寸的笔记本上,看起来总是很别扭(虽然它支持了方法定义可以换行,但在xcode创建一个文件时,它对于包含多个参数的那些默认方法名称也是不换行的)。使用xcode默认的代码格式化器貌似也没有对方法的参数换行(就算有,对于已经存在的项目这种历史遗留问题,一个文件一个文件去手动执行格式化命令,也怪累人的)

于是,我写了个脚本,专门用来做这件事。

它根据配置的项目路径:

#TODO: change the path to your xcode project path
GLOBAL_PROJECT_PATH     = '/Users/yanghua/Desktop/weiboDemo'

去匹配特定后缀的文件类型:

#want to match 
GLOBAL_INCLUDE = ['*.h', '*.m']

当然,为了小心起见你或许不想动那些你从外部引入的库文件,这里也对此进行了支持(你只需把需要排除的文件夹相对路径或文件的相对路径填写进去即可):

#want to exclude               
GLOBAL_EXCLUDE = [] 

然后,它就会遍历所有匹配到的文件,打开它们,再遍历所有的行,使用正则来匹配方法签名

注:这里的正则表达式,是自己根据obj-c语法写的。用此脚本格式化了两个项目后,再进行编译没有发现语法错误。本人正则小白,如果有更好的写法,请不吝赐教!

#match method pattern
#\s                 :space
#\s*                :0 or n space
#([\d\w]*)          :0 or n number or char such as (void) / ( CGFloat)
#(([\d\w]*)\s*\**\s*):  such as: (NSString* ) / ( UITableViewController *)
#\(                 :match left '('
#\)                 :match right ')'
GLOBAL_METHOD_PATTERN   = '^\s*(-|\+)\s*\(\s*(([\d\w]*)\s*\**\s*)\s*\)\s*'

#match notation and postil
GLOBAL_UNUSED_PATTERN   = '^\s*(//|//*)\s*'

几点说明:

(1)匹配所有方法名

(2)如果方法没有或只有一个参数则不进行处理

(3)如果方法多于一个参数,从第二个参数开始,任何参数的标签,如果比方法名第一段字符个数多,也不进行处理(因为这样这行,无法基于冒号对齐)

(4)对于被注释的方法名,不进行任何处理

(5)对于方法调用暂时没有进行处理(太复杂了)

(6)其他的方法签名都会被匹配折行处理

效果举例:

-(CGFloat) getHeightWithText:(NSString*)text fontSize:(CGFloat)fontSize constraint:(CGSize)cSize minHeight:(CGFloat)mHeight;

to:

-(CGFloat) getHeightWithText:(NSString*)text
                        fontSize:(CGFloat)fontSize
                      constraint:(CGSize)cSize
                       minHeight:(CGFloat)mHeight;


svn missing-file 警告处理器


最近在写一个项目,虽然iOS端只有本人一个。但还是尝试Xcode自带的“Source Control”功能,并采用了SVN来作为版本控制。用的还行(因为也只是一个人在Check in/out),但还是遇到了些问题。
Bug产生过程:
1. Project处于svn版本控制之下
2. (可有可无)向Project中添加文件,并加入版本控制(A)
3. 从项目中Delete某个文件,并选择Move to trash
4. 编译的时候会有Wraning提示缺少了之前删除的那个文件(Missing File xxxx)
另外,一个文件以处于版本控制下,修改文件名,也会产生Missing File Warning
具体情况以及处理方式,可参考 这篇文章
对于这个问题,参考它的解决方案,我同样写了个脚本来处理它,这个没什么好说的,就是采用了svn的命令行命令。
正常SVN操作策略下:如果产生了上面的问题,在Terminal下,进入项目路径,运行“svn status” 会看到“Missing”的那些file 前面会有个“?”。(注意,不只是这种情况才会产生?,所以我说在正常的SVN操作下,因为特殊情况无法控制)。脚本匹配到带有?号开头的行,但其中不包含项目文件——.xcodeproj。找到它然后进行删除!

运行


命令行运行

./Users/yanghua/Desktop/Python/objcFileHandler/objcMethodFormatter.py

Xcode 内置 per/post-action 运行【推荐】

第一步:


第二步:


你可以对左边这些Scheme做任意的配置,他们实现了类似“AOP”思想的拦截。使得你可以在某个动作的前后增加前置(Pre-actions)和后置(post-actions)加以干涉。点击“+”选择创建运行脚本。

第三步:


选择Target, 然后键入需要运行的脚本路径。这样每次你执行特定的Scheme(比如这里的Build),它就会执行一次,并且就算脚本有问题,也不会影响主要动作(Build)。
个人认为,Xcode提供这种功能真心非常不错。

写在最后

这两个脚本的源码,都提交到本人的 GitHub上去了。有需要的可以自行取用。
另外如果你有不错的idea,欢迎提供,欢迎拍砖!
https://github.com/yanghua/objc-xcode-Hack-Handlers


原文发布时间为:2013-03-30

本文作者:vinoYang

本文来自云栖社区合作伙伴 CSDN博客,了解相关信息可以关注CSDN博客。
目录
相关文章
|
13天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
54 1
|
20天前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
21天前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
44 1
|
10天前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。
|
9天前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
14天前
|
移动开发 前端开发 Swift
iOS 最好的应用程序开发编程语言竟然是这7种
iOS 最好的应用程序开发编程语言竟然是这7种
49 8
|
12天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
17天前
|
XML 前端开发 数据格式
Ruby脚本:自动化网页图像下载的实践案例
Ruby脚本:自动化网页图像下载的实践案例
|
16天前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
21天前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
24 2