对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博客。
目录
相关文章
|
4天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
104 60
|
17天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
108 66
|
20天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
126 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
3天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
27天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
1月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
51 7
|
29天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。