那些年你用过的iOS开发工具

news2024/12/26 11:01:59

版权说明

本文转载于《程序员》杂志 2014 年 6 月刊。

前言

从苹果发明 iPhone 起,AppStore 上的一个又一个类似 flappy bird 的一夜暴富的故事刺激着大量开发者加入移动开发大军。随着这些开发者出现的,还有大量方便 iOS 开发者的各种工具。这些工具作为整个应用开发生态链的重要一环,极大地方便了广大应用开发者,节省了应用开发的时间。

本文将从应用工具、命令行工具、插件工具 3 个方面,介绍这些优秀的应用。

图形应用工具

Charles

Charles(http://www.charlesproxy.com)是在 Mac 下常用的截取网络封包的工具,在做 iOS 开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。

Charles 详细的使用说明,欢迎阅读我的文章:《iOS 开发工具-网络封包分析工具 Charles》

界面调试

PonyDebugger(GitHub - square/PonyDebugger: Remote network and data debugging for your native iOS app using Chrome Developer Tools)、Reveal(Reveal by Itty Bitty Apps)、Spark Inspector(Coming Soon)是三个常用的界面调试工具,可以在程序运行时动态调试 iOS 应用界面。PonyDebugger 是免费并且开源的,后两者是收费的,不过功能更加强大。

对于动态或复杂的交互界面,手写 UI 的是不可避免的,而 Reveal 一类的工具可以方便我们查看控件的相应属性是否正常,并且可以在程序运行时,动态地修改界面元素。这样就不用反复地修改代码并且重启程序了。

xScope

xScope(xScope • Measure. Inspect. Test.)是一类与界面开发相关的工具集。对于 iOS 开发,比较好用的功能包括它的放大镜取色工具、标尺工具等。其中放大镜取色工具可以将取到的多个色集收集起来,方便后续使用,并且支持直接粘贴成相关的程序颜色代码。

xScope 是收费软件,对于未付费版本,其功能有一些限制。

ImageOptim

ImageOptim(ImageOptim — better Save for Web)是一个图象压缩的免费工具。iOS 工程默认使用的是 pngcrush 命令来压缩图片,不过其压缩比率其实不高。对于应用中图片资源比较多的读者,可以尝试使用 ImageOptim 来达到最大的图片压缩效果。

如果你从未尝试过 ImageOptim 一类的图片压缩工具,那么第一次给 IPA 文件瘦身的效果应该是比较惊人的。我个人的经验是,初次使用时 ImageOptim 能减少至少 10% 的应用图片资源占用。

ImageOptim 的实现原理是使用各种开源的图像压缩工具,然后取效果最好的那一个。它尝试的工具包括:PNGOUT, Zopfli, Pngcrush, AdvPNG, extended OptiPNG, JpegOptim, jpegrescan, jpegtran 和 Gifsicle。

安装方式是从其官方网站(ImageOptim — better Save for Web)上下载程序文件,拖动到 “应用程序” 目录即可。下图是本篇文章所有的配图,可以看到使用 ImageOptim 达到了 29.5% 的体积缩小。

马克鳗

马克鳗(马克鳗 - 设计稿标注、测量)是国人开发的一款免费标注工具,可以方便地在美术输出的设计稿上标注相应界面元素的大小,颜色,边距,说明等。

命令行工具

CocoaPods

每种语言发展到一个阶段,就会出现相应的依赖管理工具或者是中央代码仓库。比如 Java 的 maven,Nodejs 的 npm 等。而 CocoaPods(CocoaPods.org)是为 iOS 程序提供依赖管理的工具。开发 iOS 项目不可避免地要使用第三方开源库,CocoaPods 的出现使得我们可以节省设置和更新第三方开源库的时间。

在我开发猿题库客户端时,其使用了 24 个第三方开源库。在没有使用 CocoaPods 以前,我需要:

  1. 把这些第三方开源库的源代码文件复制到项目中,或者设置成 git 的 submodule。
  2. 对于这些开源库通常需要依赖系统的一些 framework,我需要手工地将这些 framework 一一增加到项目依赖中,比如通常情况下,一个网络库就需要增加以下 framework: CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics, zlib。
  3. 对于某些开源库,我还需要设置-licucore或者 -fno-objc-arc等编译参数
  4. 管理这些依赖包的更新。

这些体力活虽然简单,但毫无技术含量并且浪费时间。在使用 CocoaPods 之后,我只需要将用到的第三方开源库放到一个名为 Podfile 的文件中,然后执行pod install。CocoaPods 就会自动将这些第三方开源库的源码下载下来,并且为我的工程设置好相应的系统依赖和编译参数。

使用 CocoaPods 还需要注意以下几点:

  1. 需要使用 CocoaPods 生成的 .xcworkspace 文件来打开工程,而不是以前的 .xcodeproj 文件。
  2. 每次更改了 Podfile 文件,你需要重新执行一次pod update命令。
  3. 当你执行pod install之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock的文件,你应该把这个文件加入到版本管理中。因为 Podfile.lock 会锁定当前各依赖库的版本,之后如果多次执行pod install 不会更改版本,要pod update才会改Podfile.lock了。这样的好处是:当多人协作的时候,可以保证所有人的第三库环境是完全一样的。

详细的使用说明,欢迎阅读我的文章:《用 CocoaPods 做 iOS 程序的依赖管理》

nomad

nomad(Nomad - World-Class Command Line Utilities For iOS Development)是一个方便你操作苹果开发者中心(Apple Developer Center)的命令行工具,可以做的事情包括方便地添加测试设备,更新证书文件,增加 App id,验证 IAP 的凭证等。

安装方式:

gem install nomad-cli

安装完后,首先执行ios login,你的 Developer 账号密码会被它存储到 Keychain 中,之后就可以用命令行来完成各种后台操作了,例如:

添加测试设备:

ios devices:add "TangQiaos iPhone"=<Device Identifier>

更新证书文件:

ios profiles:devices:add TangQiao_Profile "TangQiaos iPhone"=<Device Identifier>

nomad 还有很多功能,建议大家阅读其官方网站的文档进一步学习。

xctool

xctool(GitHub - facebookarchive/xctool: An extension for Apple's xcodebuild that makes it easier to test iOS and macOS apps.)是 facebook 开源的一个 iOS 编译和测试的工具。使用它而不是用 Xcode 的 UI 界面是因为它是一个纯命令行工具。比如:我们可以使用 xctool 在命令生下进行编译和单元测试,然后将测试结果集成到 Jenkins 中,这样就实现了自动化的持续集成。虽然苹果也在 OSX Server 上推出了自己的自动化集成工具 BOT,但其配置和使用上现在仍然不太方便。

安装 xctool 可以使用 brew 命令:

brew install xctool

使用 xctool 编译项目可以使用如下命令:

path/to/xctool.sh \
  -project YourProject.xcodeproj \
  -scheme YourScheme \
  build

使用 xctool 执行单元测试,可以使用如下命令:

path/to/xctool.sh \
  -workspace YourWorkspace.xcworkspace \
  -scheme YourScheme \
  test

xctool 还有很多功能,建议大家阅读 xctool 官方网站的文档进一步了解更多的功能。

appledoc

appledoc(GitHub - tomaz/appledoc: Objective-c code Apple style documentation set generator.)是一个从源码中抽取文档的工具。

对于开发者来说,文档最好和源码在一起,这样更新起来更加方便和顺手。象 Java 一类的语言本身就自带 javadoc 命令,可以从源码中抽取文档。而 appledoc 就是一个类似 javadoc 的命令行程序,可以从 iOS 工程的源代码中抽取相应的注释,生成帮助文档。

相对于其它的文档生成工具,appledoc 的优点是:

  • 它默认生成的文档风格和苹果的官方文档是一致的。
  • appledoc 就是用 objective-c 写的,必要的时候调试和改动也比较方便。
  • 它可以生成 docset,并且集成到 xcode 中。集成之后,在相应的 API 调用处,按住 option 再单击就可以调出相关的帮助文档。
  • 它没有特殊的注释要求,兼容性高。

安装 appledoc 可以直接使用 brew 命令:

brew install appledoc

使用时切换到 iOS 工程目录下,执行以下操作即可,appledoc 会扫描当前路径下的所有文件,然后生成好文档放到 doc 目录下。你也可以用 appledoc —help 查看所有可用的参数。

appledoc -o <output_path> \
--project-name <project_name> \
--project-company <project_company> .

详细的使用介绍,欢迎阅读我的文章:《使用 Objective-C 的文档生成工具:appledoc》

Xcode 插件

Xcode 是 iOS 的集成开发环境,虽然苹果一直在不断改进 Xcode,但程序员总是有各种新奇的想法和需求,当 Xcode 无法满足他们时,于是他们就会通过插件的方式来为 Xcode 增加新的功能。本节将会给大家介绍一些常用的 Xcode 增强插件。

Xcode 所有的插件都安装在目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/下,每个插件为一个子目录,你也可以手工切换到这个目录来增加或删除插件。

Alcatraz

Alcatraz(Welcome to nginx!)是管理 Xcode 所有插件的插件,它可以直接集成到 Xcode 的图形界面中,让你感觉就像在使用 Xcode 自带的功能一样。Alcatraz 不但可以管理 Xcode 的插件,它另外还提供了管理 Xcode 工程模版以及颜色配置的功能。

使用如下的命令行来安装 Alcatraz:

mkdir -p ~/Library/Application\ Support/\
Developer/Shared/Xcode/Plug-ins;
curl -L http://git.io/lOQWeA |\
 tar xvz -C ~/Library/Application\ Support/\
 Developer/Shared/Xcode/Plug-ins

安装成功后重启 Xcode,就可以在 Xcode 的顶部菜单中的 “Window”->“Package Manager” 中找到 Alcatraz。点击 “Package Manager”,即可启动插件列表页面。你可以在右上角搜索插件,对于想安装的插件,点击其左边的图标,即可下载安装,如下所示,我正在安装 KImageNamed 插件:

安装完成后,再次点击插件左边的图标,可以将该插件删除。

以下所有介绍的插件均可用该方法来安装或删掉,就不另行介绍了。

Alcatraz 详细的使用介绍,欢迎阅读我的文章:《使用 Alcatraz 来管理 Xcode 插件》

KSImageNamed

KSImageNamed(GitHub - ksuther/KSImageNamed-Xcode: Xcode plug-in that provides autocomplete for imageNamed: calls)是一个帮助你输入 [UIImage imageNamed:] 中的资源名的插件。当你输入[UIImage imageNamed:]时,会自动的弹出上下文菜单,供你选择你需要输入的图片资源名字,另外在选择图片资源时,还可以在左侧预览该资源。如下图所示:

XVim

XVim(GitHub - XVimProject/XVim: Xcode plugin for Vim keybindings)是一个 Xcode 的 vim 插件,可以在 Xcode 的编辑窗口中开启 vim 模式。

vim 模式最大的好处是可以全键盘操作,可以方便地移动光标以及复制、粘贴代码。XVim 对于 Xcode 的分栏模式也有很好的支持,与 vim 自带的分栏模式一样,可以用快捷键ctrl + w来切换当前编辑的分栏。

FuzzyAutocompletePlugin

FuzzyAutocompletePlugin (GitHub - FuzzyAutocomplete/FuzzyAutocompletePlugin: A Xcode 5+ plugin that adds more flexible autocompletion rather than just prefix-matching.) 允许使用模糊的方式来进行代码自动补全。

举个例子,如果我们要重载 viewDidAppear:方法,那么我们必须依次建入 view、did、appear 才能得到相应的补全信息,使用 FuzzyAutocompletePlugin 之后,我们可以建入 vda (view、did、appear 三个单词的首字母),或任意符合 viewDidAppear 整个单词出现顺序的子串 (例如 vdapp, adear 等),即可匹配到该方法。

XToDo

XToDo(GitHub - trawor/XToDo: Xcode plugin to collect and list the `TODO`,`FIXME`,`???`,`!!!!`)是一个查找项目中所有的带有 TODOFIXME???!!! 标记的注释。

通常我们在项目开发中,由于种种原因,一些事情需要以后处理,这个时候为了防止遗忘,加上TODOFIXME注释是非常有必要的,但是上线或提交代码前要寻找这些未解决的事项却稍显麻烦。XToDo 可以提供一个汇总的界面,集中显示所有的未完成的TODOFIXME标记。

BBUDebuggerTuckAway

BBUDebuggerTuckAway(GitHub - neonichu/BBUDebuggerTuckAway: Xcode plugin for auto-hiding the debugger once you start typing in the source code editor.)是一个非常小的工具,可以在你编辑代码的时候自动隐藏底部的调试窗口。因为通常情况下,调试的时候是加断点或监控变量变化,或者在 Console 窗口用po来输出一些调试信息。如果开始编辑代码了,说明已经调试结束了,这个时候隐藏调试窗口,可以给编辑界面更多空间,方便我们修改代码。

SCXcodeSwitchExpander

SCXcodeSwitchExpander(GitHub - stefanceriu/SCXcodeSwitchExpander: Xcode plugin that enables switch cases autocompletion)帮助你迅速地在switch语句中填充枚举类型的每种可能的取值。

例如,当你输入switch,然后键入一个NSTableViewAnimationOptions类时,该插件会将其可能的取值补全在每一个case之后,如下图所示:

deriveddata-exterminator

deriveddata-exterminator(https://github.com/kattrali/deriveddata-exterminator)是一个清除 Xcode 缓存目录的插件。

有些时候 Xcode 会出各种奇怪的问题,最常见的是在某些复杂操作下(例如同一个项目,来回切换到各种分支版本),会造成 Xcode 显示一些编译的错误或警告,但是最终却又可以编译通过。新手遇到这种问题常常束手无策,而熟悉 Xcode 的人就知道,通常清除 Xcode 缓存就可以解决这类问题。该插件在 Xcode 菜单上增加了一个清除缓存按钮,可以一键方便地清楚缓存内容。

VVDocumenter

VVDocumenter(GitHub - onevcat/VVDocumenter-Xcode: Xcode plug-in which helps you write documentation comment easier, for both Objective-C and Swift.)是一个自动生成代码注释的工具,可以方便地将函数的参数名和返回值提取出来,这样结合上一节介绍的appledoc命令,就可以方便地将帮助文档输出。

ClangFormat

ClangFormat(GitHub - travisjeffery/ClangFormat-Xcode: Xcode plug-in to to use clang-format from in Xcode and consistently format your code with Clang)是一个自动调整代码风格(Code Style)的工具。Xcode 本身的代码缩进自动调整功能比较弱,特别是对于 JSON 格式,常常产生非常丑陋的默认缩进效果。ClangFormat-Xcode 可以更好地对代码进行重新排版,并且内置了各种排版风格,也支持自定义风格。

ColorSense

ColorSense(GitHub - omz/ColorSense-for-Xcode: Plugin for Xcode to make working with colors more visual)是一个UIColor颜色输入辅助工具,可以帮助你在编写UIColor代码时,实时预览相应的颜色,如下图所示:

XcodeBoost

XcodeBoost(GitHub - fortinmike/XcodeBoost: An Xcode plugin that aims to make altering and inspecting code quick and easy.)包含多个辅助修改代码的小功能,比如:

  • 可以在 .m 文件中复制方法实现,然后将该方法的定义粘贴到对应的 .h 文件中
  • 可以在某一个源文件中直接输入正则表达式查找
  • 可以复制粘贴代码时不启用 Xcode 的自动缩进功能(Xcode 的自动缩进经常出问题,造成已经调整好的代码缩进,因为粘贴时被 Xcode 调整坏了)

总结

本文分图形应用工具,命令行工具,Xcode 插件三个部分,介绍了 iOS 开发中好用的工具。其中涉及的图形工具部分是收费的,而命令行工具和 Xcode 插件工具全部是免费并且开源的工具,笔者在此也感谢广大的开源软件作者,是他们让整个软件生态圈更加美好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

琪朗护眼大路灯推荐入手吗?书客、琪朗、雷士落地灯测评大比拼!

护眼大路灯现在的风越来越大&#xff0c;它是一种能够改善光线质量的工具&#xff0c;通过光源的设计、技术的调校、防眩光的设计等&#xff0c;利用LED全光谱光源的高能效、长寿命光色稳定性的优点&#xff0c;搭载专研的护眼黑科技技术&#xff0c;以及采用防眩光设计&#x…

【vue3|第10期】Vue3中watchEffect详解

日期&#xff1a;2024年6月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

4、matlab双目相机标定实验

1、双目相机标定原理及流程 双目相机标定是将双目相机系统的内外参数计算出来&#xff0c;从而实现双目视觉中的立体测量和深度感知。标定的目的是确定各个摄像头的内部参数&#xff08;如焦距、主点、畸变等&#xff09;和外部参数&#xff08;如相机位置、朝向等&#xff09…

【因果推断python】42_异质干预效应2

目录 预测弹性 关键思想 预测弹性 我们在这里陷入了复杂的境地。我们已经同意我们需要预测 &#xff0c;遗憾的是这是不可观察的。因此&#xff0c;我们不能使用 ML 算法并将其作为目标插入。但也许我们不需要观察 来预测它 这是一个想法。如果我们使用线性回归呢&#xff…

Flutter ffi iOS Failed to lookup symbol

官方文档&#xff1a;在 iOS 中使用 dart:ffi 调用本地代码

【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 一、重要信息 大会官网&#xff1a;www…

App上架和推广前的准备

众所周知&#xff0c;App推广的第一步是上架各大应用下载市场&#xff0c;然后才是其他推广渠道。所以本文主要分两部分&#xff0c;第一部分主要介绍的是上架各大应用市场方面的准备&#xff0c;第二部分主要介绍的是其他渠道推广方面的准备。 一、App上架前的准备 1.1 上架…

MySQL----表级锁行级锁排它锁和共享锁意向锁

MySQL的锁机制 锁&#xff08;Locking&#xff09;是数据库在并发访问时保证数据一致性和完整性的主要机制。在 MySQL 中&#xff0c;不同存储引擎使用不同的加锁方式&#xff1b;我们以 InnoDB 存储引擎为例介绍 MySQL 中的锁机制&#xff0c;其他存储引擎中的锁相对简单一些…

游戏开发丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容&#xff1a;基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…

【一文开启StableDiffusion】最火AIGC绘画工具SD阿里云部署指南(含踩坑经验)

Midjonery使用简单&#xff0c;效果出色&#xff0c;不过需要付费。本文将介绍完全开源的另一款产品StableDiffusion&#xff0c;它的社区目前非常活跃&#xff0c;各种插件和微调模型都非常多&#xff0c;而且它无需付费注册&#xff0c;没有速度、网络限制&#xff0c;非常推…

Matlab基础篇:数据输入输出

前言 数据输入和输出是 Matlab 数据分析和处理的核心部分。良好的数据输入输出能够提高工作效率&#xff0c;并确保数据处理的准确性。本文将详细介绍 Matlab 数据输入输出的各种方法&#xff0c;包括导入和导出数据、数据处理和数据可视化。 一、导入数据 Matlab 提供了多种方…

使用Tkinter创建带查找功能的文本编辑器

使用Tkinter创建带查找功能的文本编辑器 介绍效果代码解析创建主窗口添加菜单栏实现文件操作实现查找 完整代码 介绍 在这篇博客中&#xff0c;我将分享如何使用Python的Tkinter库创建一个带有查找功能的简单文本编辑器。 效果 代码解析 创建主窗口 import tkinter as tkcl…

第二十章 迭代器模式

目录 1 迭代器模式介绍 2 迭代器模式原理 3 迭代器模式实现 4 迭代器模式应用实例 5 迭代器模式总结 1 迭代器模式介绍 迭代器模式(Iterator pattern)又叫游标&#xff08;Cursor&#xff09;模式&#xff0c;它的原始定义是&#xff1a;迭代器提供一种对容器对象中的各…

supOS数据集成

为解决企业数据孤岛问题&#xff0c;supOS对外提供了天湖能力&#xff0c;APP应用集成到supOS后可以使用supOS的天湖&#xff0c;所有数据归集到天湖&#xff0c;利用supOS的ESB消息总线能力实现各个业务系统的服务注册&#xff0c;对外提供统一消息总线能力&#xff0c;从而解…

电致变色和电泳——有什么区别?

虽然电泳显示器和电致变色显示器都是反射显示器的示例&#xff0c;但其基础技术却截然不同。电致变色显示器采用超薄聚合物&#xff0c;可响应施加的电场而改变颜色。电场使电致变色材料发生化学氧化和还原。这种变化需要的能量很少&#xff0c;而且比较稳定&#xff0c;因此刷…

【尚庭公寓SpringBoot + Vue 项目实战】后台岗位管理(十六)

【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理&#xff08;十六&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】后台岗位管理&#xff08;十六&#xff09;1、业务说明2、逻辑模型介绍3、接口开发3.1、分页查询岗位信息3.2、保存或更新岗位信息3.3、根据ID删…

vue项目build 打包之后如何本地访问

vue项目build 打包之后如何本地访问 注意&#xff1a;vue项目build打包后 如果想实现本地访问 不能直接打开访问dist文件中的HTML文件&#xff08;因为页面带会报错打不开。&#xff09;&#xff0c;需要启一个服务&#xff0c;通过服务来访问&#xff1a; 具体操作过程如下&am…

2024/06/18--代码随想录算法7/17|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 力扣链接 动态规划5步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a; dp[i]: 下标i内&#xff08;包括i&#xff09;的房屋&#xff0c;最多可以偷到的金额为dp[i]确定递推公式 dp[i] max(dp[i-1], dp[i-2]nums[i]&#xff09;dp数…

磨削可以减少噪音和振动,并有助于提高电动汽车的齿轮效率

随着汽油成本的不断增加以及保护环境的愿望不断增强&#xff0c;电动汽车的发展势头越来越强劲也就不足为奇了。汽车制造商正在积极推动推出全电动产品&#xff0c;甚至比最初的目标日期 2040 年还要早。为了支持电气化的发展&#xff0c;支持这些车辆的供应链正在进行巨额投资…

全网最全!25届最近5年上海交通大学自动化考研院校分析

上海交通大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图 六、历年真题PDF 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教材介绍…