写给iOS程序员的命令⾏使⽤秘籍
Mac OS是Unix系统的分⽀,有着强⼤的命令⾏功能。很多事情在命令⾏下处理会事半功倍,所以我就iOS程序员可能会⽤到的功能讲述⼀下。
终端设置
Mac的终端有⼀个很关键的配置,就是“使⽤ Option 键作为 Meta 键”。勾上这个选项之后,就可以使⽤Emacs的编辑命令了。
我发现有些⼈的终端没有设置“平滑⽂本”,导致终端上的⽂字很难看。赶紧把这个选项勾上吧。
常⽤的⼏个快捷键如下。
control+a,跳到命令⾏开始位置;control+e,跳到命令⾏结尾位置。
option+f,向后跳⼀个word;option+b,向前跳⼀个word。
option+d,向后删除⼀个word;option+delete,向前删除⼀个word。
control+_,撤销之前⼀次编辑操作。
control+k,删除到⾏尾;control+u,删除到⾏⾸。
终端颜⾊⾼亮也不错,看起来感觉会更有感觉。⽐如ls可以看到⽬录会是蓝⾊的,普通⽂件是⽩⾊的,可执⾏程序会是绿⾊的。
homebrew
homebrew是⼀个⾮常有⽤包管理⼯具,通过homebrew可以安装更多有⽤的unix⼯具,⽐如wget、tree等等。
安装
⽬前最好的安装⽅式都是下⾯这样的,⼀句命令搞定。
ruby -e "$(curl -fsSL raw.githubusercontent/Homebrew/install/master/install)"
使⽤
[~]$ brew install tree
==> Downloading mama.indstate.edu/users/ice/tree/src/tree-1.
Already downloaded: /Library/Caches/Homebrew/tree-1.
==> make prefix=/usr/local/Cellar/tree/1.7.0 MANDIR=/usr/local/Cellar/tree/1.7.0/share/man/man1 CC=clang CFLAGS=-fomit-frame-pointer LD
/usr/local/Cellar/tree/1.7.0: 7 files, 128K, built in 2 seconds
tree这个⼯具看⽬录的内容⾮常直观好看。
[~/ilaiwang/LWShareTo]$ tree
.
├── LWShareTo
│├── LWShareContent.h
│├── LWShareContent.m
│├── LWShareTo-Prefix.pch
│├── LWShareTo.h
│├── LWShareTo.m
│├── LWShareToMacro.h
│├── LWShareToUtils.h
│├── LWShareToUtils.m
│├── ShareModule
││├── LWShareChannelService.h
││├── LWShareChannelService.m
││├── LWShareToBaseClass.h
││├── LWShareToBaseClass.m
││├── LWShareToClipboard.h
││├── LWShareToClipboard.m
││├── LWShareToDouban.h
││├── LWShareToDouban.m
││├── LWShareToInside.h
││├── LWShareToInside.m
││├── LWShareToLWFeed.h
││├── LWShareToLWFeed.m
││├── LWShareToLWSession.h
││├── LWShareToLWSession.m
││├── LWShareToOutside.h
││├── LWShareToOutside.m
││├── LWShareToQQSession.h
││├── LWShareToQQSession.m
││├── LWShareToQQZone.h
││├── LWShareToQQZone.m
││├── LWShareToRenren.h
││├── LWShareToRenren.m
││├── LWShareToSinaWeibo.h
││├── LWShareToSinaWeibo.m
││├── LWShareToTencentWeibo.h
││├── LWShareToTencentWeibo.m
││├── LWShareToWechatSession.h
││├── LWShareToWechatSession.m
││├── LWShareToWechatTimeline.h
││└── LWShareToWechatTimeline.m
│├── WebviewRender.h
│└── WebviewRender.m
├── deproj
│└── project.pbxproj
└── LWShareToTests
├── LWShareToTests-Info.plist
├── LWShareToTests.m
└── en.lproj
└── InfoPlist.strings
5 directories, 44 files
shell
GNU Coreutils包含了各种GNU好⽤的⼯具。根据我的观察,我发现Mac预装了Coreutils,只是版本⽐较低,建议⾃⼰安装⼀下,否者sort连”-h”参数都没有。
Xcode图形化操作挺好⽤的,不过知道⼀些命令⾏的操作会更佳。在下⾯这个地⽅看到Xcode编译的详细过程。
如果在编译的时候遇到链接错误,在命令⾏下检查⼀下就⾮常有必要了。下⾯这个命令就是链接⽣成来往⼆进制程序的,可以拷贝到终端⾥⾯运⾏。如果链接出错误了,可以仔细检查⼀下这个命令。
Ld /Users/henshao/Library/Developer/Xcode/DerivedData/Laiwang-fxscnxkslrypubbeazdfkveysldy/Build/Products/Debug-iphoneos/Laiwang.app/Laiwang normal arm64
cd /Users/henshao/ilaiwang/LaiwangV3
export IPHONEOS_DEPLOYMENT_TARGET=6.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/lchain/usr/bin/clang++ -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk -L/Users/henshao/Library/常⽤的⼯具如下。
find,查⽂件。⽐如我想分析⼀下来往源代码各个部分的⽂件数量。可以发现业务⾥⾯⽂件数量最多的三个业务分别是扎堆、敲门和聊天。
[~/ilaiwang/LaiwangV3/Laiwang/PageViews]$ find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo $(find {} -type f | wc -l) {}' | sort -nr
914 .
167 ./EventPage
92 ./ChatPage
91 ./KnockPage
88 ./FriendPage
86 ./PubAccountPage
54 ./FeedPage
47 ./SharedPage
44 ./PostPage
29 ./SearchPage
29 ./PhotoEditorPage
29 ./MorePage
28 ./NearByPage
26 ./FriendRadarPage
15 ./LoginPage
14 ./MinePage
14 ./AlbumPage
12 ./PhotoFilterPage
10 ./EmotionBoxPage
9 ./ShareMsgPage
8 ./XiamiPage
8 ./NotificationPage
4 ./IntroducePage
2 ./OAuthPage
2 ./NewGuidePage
2 ./MusicPage
2 ./MoviePage
2 ./DiscoveryExPage
grep,搜索⽂本。结合正则表达式,分析⽇志什么的,⾮常之强⼤。grep有⼏个有⽤的选项,分别是“-r”递归搜索⽬录;“-i”,忽略⼤⼩写;“-c”,统计符合搜索条件的⽂本的⾏数;“–color”,⾼亮搜索结果。
du,统计⽬录⼤⼩。⽐如我想知道来往图⽚资源的情况。可以看出图⽚资源⼀共有8.2MB,其中共享的图⽚占到2.1MB,其次是聊天的图⽚占了1.4MB。
[~/iOS_release/lwimageassets]$ du -sh LWImageAssets
8.2M  LWImageAssets
[~/iOS_release/lwimageassets/LWImageAssets]$ du -sh * | sort -hr
2.1M  shared_img
1.4M  chat_img
636K  event_img
528K  icon_default
524K  feed_img
472K  post_img
464K  knock_img
392K  radar_img
284K  profile_img
264K  friend_img
236K  pub_account_map_img
140K  editor_img
132K  yifa_img
132K  emotion_img
84K  neighbour_img
80K  lwuikits_img
76K  discovery_img
72K  graffiti_img
72K  asr_img
60K  login_img
52K  video_guide_img
44K  qr_img
40K  more_img
36K  share_msg_img
32K  my_img
20K  slide_img
16K  animal_img
12K  xiamibar_img
4.0K  search_img
4.0K  movie_img
file,⽤于查看⽂件信息。
$ file libxiamiMusic.a
libxiamiMusic.a: Mach-O universal binary with 4 architecturesgrep命令有什么用
libxiamiMusic.a (for architecture armv7):  current ar archive random library
libxiamiMusic.a (for architecture i386):  current ar archive random library
libxiamiMusic.a (for architecture x86_64):  current ar archive random library
libxiamiMusic.a (for architecture arm64):  current ar archive random library
$ file Laiwang
Laiwang: Mach-O 64-bit executable
strings,查看⽂件中的⽂本信息。
$ strings Laiwang | head -n 10
kSearchTextKey
kSearchedPersonKey
invalid_token
user_in_black_list
user_blocked
expired_token
invalid_grant
refreshed_token
client_id
client_secret
nm,查看可执⾏程序⾥⾯的符号信息。
$ nm Laiwang | head -n 10
00000001001425e4 t +[ABContact addressWithStreet:withCity:withState:withZip:withCountry:withCode:]
0000000100142484 t +[ABContact arrayForProperty:inRecord:]
0000000100146438 t +[ABContact contactWithData:]
000000010014591c t +[ABContact contactWithDictionary:]
000000010014191c t +[ABContact contactWithRecord:]
0000000100141984 t +[ABContact contactWithRecordID:]
0000000100141b70 t +[ABContact contact]
000000010014252c t +[ABContact dictionaryWithValue:andLabel:]
0000000100141c50 t +[ABContact localizedPropertyName:]
00000001001424e8 t +[ABContact objectForProperty:inRecord:]
vim
做简单的⽂本编辑和分析,vim是⾮常⽅便的。最简单有⽤的配置如下。在HOME⽬录下创建.vimrc隐藏⽂件,把下⾯的内容拷贝进去即可。
syntax on #⽀持语法⾼亮,看源代码⽂件会很舒服。
set hls #使⽤ / 查内容的时候,会⾼亮字符串。
set ic #搜索的时候忽略⼤⼩写
CocoaPods
CocoaPods的源都安装在”~/.cocoapods/repos”⽬录下,有时候不到pod、版本有问题、或者想确定⼀下pod的信息,都可以来这个地⽅翻⼀翻。
[~/.cocoapods/repos]$ ls
TBMainClientSpecs/ alibaba/ master/
[~/.cocoapods/repos]$ ls TBMainClientSpecs/
AMPSDK/          TBCalendar/      TBLoginCenter/    TBScanCode/    TBWeiTao/
AccsSDK/        TBCalendarService/    TBLoginService/    TBScanCodeService/ TBWeiTaoService/
[~]$ pod search swiftyjson
-> AISwiftyJSON (1.0.6)
AISwiftyJSON makes it easy to deal with JSON data in Swift .
pod 'AISwiftyJSON', '~> 1.0.6'
- Homepage: github/asiainfomobile/AISwiftyJSON
- Source:  git@mirror.git.alibaba-inc:asiainfomobile/AISwiftyJSON.git
- Versions: 1.0.6, 1.0.3 [master repo]
-> SwiftyJSON (2.3.2)
SwiftyJSON makes it easy to deal with JSON data in Swift
pod 'SwiftyJSON', '~> 2.3.2'
- Homepage: github/SwiftyJSON/SwiftyJSON
- Source:  git@mirror.git.alibaba-inc:SwiftyJSON/SwiftyJSON.git
- Versions: 2.3.2, 2.3.1, 2.3.0, 2.2.1, 2.2.0, 2.1.3 [master repo]
sqlite
Mac⾃带了sqlite命令⾏⼯具。⼩⼯具⽤起来很快很⽅便。所以简单介绍⼀下怎么使⽤这个⼯具。其实”.help”讲得很详细啦。
[~/Downloads]$ sqlite3 laiwang.sqlite3
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> .tables
lw_messages      lw_session_event_post
lw_offline_post2    lw_sessions
sqlite> .schema lw_sessions
CREATE TABLE lw_sessions (primaryKey INTEGER primary key autoincrement, sessionId TEXT, userId TEXT, title TEXT, icon TEXT, content TEXT, sourceType TEXT, data BLOB, actionType TEXT, actionContent TEXT, senderId TEXT, settings BLOB, u CREATE UNIQUE INDEX idx_sessions_SidUidSt ON lw_sessions(sessionId, userId, sourceType);
CREATE INDEX idx_sessions_UidStSiLm ON lw_sessions(userId, sourceType, sortIndex, lastModify);
sqlite> select * from lw_sessions limit 1;
1|2651304|2921438|新浪新闻|i01.lw.aliimg/tfs/T1vldnFFXbXXbKnNzJLAIWANGtebus_73957a0c_180_180.60x60.jpg||pubmessage|||{"type":""}|||0|0|1429026489000|||0||
Python SimpleHTTPServer
SimpleHTTPServer模块绝对是Python最有⽤的⼀个模块(另外⼀个可能是json)。⼀个命令就能启动⼀个Web服务器,做演⽰或者mock接⼝,不要太⽅便了。
[~]$ python -m SimpleHTTPServer 9876
Serving HTTP on 0.0.0.0 port 9876 ...
nomad houston
nomad houston这个⼯具⽀持在命令⾏下给APP推送信息,感觉蛮不错的。
以上就是写给iOS程序员的命令⾏使⽤秘籍,认为不错的朋友收藏起来吧!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。