文件系统

0. 大体目录

Application:存放系统级App

Developer:给开发者用的

Library:存放系统资源、用户设置

--Library/Logs:系统日志

--Library/Ringtones:系统铃声

--Library/LaunchDaemons:开机自启进程?

--Library/MobileSubstrate:存放着所有基于Cydia Substrate的插件

System:系统的重要组成部分

--System/Library/Carrier Bundles:运营商的一些设置

--System/Library/Frameworks:系统公开Frameworks

--System/Library/PrivateFrameworks:系统私有Frameworks

--System/Library/CoreServices/SpringBoard.app:桌面管理app

--System/Library/PreferenceBundles:系统设置App中的一些设置项

User:用户目录,实际执行”/var/mobile”

--User/Media:存放着系统相册

--User/Library:存放着短信、邮件等

bin:存放用户级的二进制文件

dev:设备文件

etc:存放系统脚本、hosts配置、SSH配置文件等,实际指向/private/etc

sbin:存放系统级二进制文件,例如reboot、mount等。

usr:用户工具和程序。

--usr/include:存放标准C头文件

--usr/lib:存放库文件

var:粗放一些经常改动的文件,包括keychains、临时文件、从App Store下载的应用

0.1 iOS10 storeApp

// 数据目录(Document & Library)
/var/mobile/Containers/Data/Application/9D304635-095C-4D17-A5A7-1FBE85654A97/Documents

/var/mobile/Containers/Data/Application/9D304635-095C-4D17-A5A7-1FBE85654A97/Library

// 应用目录(.app)
/var/containers/Bundle/Application/7D3924D3-C7B1-4D7F-B492-2CC64AC3CB62/NillApp.app

0.2 System

// 基于CydiaSubstrate的dylib

/Library/MobileSubstrate/DynamicLibraries/

// daemon

/System/Library/LaunchDaemons

/Library/LaunchDaemons

/Library/LaunchAgents

// PreferenceBundles

/System/Library/PreferenceBundles/

// 可执行文件

/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7s

/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64

0.3 Cydia

// 自动安装路径(iOS9&10 一样)
// 放在该路径下的deb包,在手机重启后,会自动安装
/var/root/Media/Cydia/AutoInstall

// iOS 9插件安装路径
// 卸载插件时,删除路径下的对应文件即可
/Library/MobileSubstrate/DynamicLibraries/


1. 文件权限

1.0 demo

lrwxr-xr-x 1 root admin 32 May 7 2016 Applications -> /var/stash/_.6ZoO3L/Applications

drwxrwxr-t 8 root admin 340 Oct 16 2015 Developer

drwxrwxr-x 17 root admin 782 Oct 26 2018 Library

drwxr-xr-x 3 root wheel 102 Oct 21 2014 System

lrwxr-xr-x 1 root admin 11 Jun 26 16:53 User -> /var/mobile

drwxr-xr-x 2 root wheel 2040 May 7 2016 bin

drwxr-xr-x 2 root wheel 68 Oct 28 2006 boot

drwxrwxr-t 2 root admin 68 Sep 13 2014 cores

dr-xr-xr-x 3 root wheel 1394 Jun 26 16:53 dev

lrwxr-xr-x 1 root admin 11 Jan 13 2015 etc -> private/etc

drwxr-xr-x 2 root wheel 68 Oct 28 2006 lib

drwxr-xr-x 2 root wheel 68 Oct 28 2006 mnt

-rwxr-xr-x 1 root admin 259504 May 7 2016 pguntether

drwxr-xr-x 4 root wheel 136 Feb 25 2015 private

drwxr-xr-x 2 root wheel 1224 Jun 25 2018 sbin

lrwxr-xr-x 1 root admin 15 Jan 13 2015 tmp -> private/var/tmp

drwxr-xr-x 9 root wheel 374 May 7 2016 usr

lrwxr-xr-x 1 root admin 11 Jan 13 2015 var -> private/var

1.1 说明

—-> 第1个字符串:10位,代表文件权限的相关说明。

第1位:表示文件的类型,“l”表示符号链接文件,“d”表示文件夹,“-”表示普通文件

第2-4位:表示文件所有者的权限

第5-7位:表示文件所属组的权限

第8-10位:表示其他人的权限

r:表示可读
w:表示可写
x:表示执行

—-> 第3个字符串:表示文件所属用户,一般为root/mobile

—-> 第4个字符串:表示文件所属组,一般为wheel/admin

1.2 权限修改

// 修改用户
chown -R mobile:mobile RIBackups/

—-> 绝对模式

// 设置用户为rwx,组为rx,其他为rx
chmod 755 testfile

—-> 符号模式

// 设置用户为删除执行,组为rx,其他增加wx
chmod u-x,g=rx,o+wx testfile

-rw------- (600) 只有所有者才有读和写的权限

-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限

-rwx------ (700) 只有所有者才有读,写,执行的权限

-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限

-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限

-rw-rw-rw- (666) 每个人都有读写的权限

-rwxrwxrwx (777) 每个人都有读写和执行的权限


2. App 相关

2.1 ipa目录 大体目录

├── META-INF

│ ├── com.apple.FixedZipMetadata.bin

│ └── com.apple.ZipMetadata.plist

├── Payload

│ └── Destiny.app

│ ├── Info.plist // 存储应用先关的设置、Bundle identifier、Executable file等

│ ├── AMap.bundle

│ ├── Frameworks // 存放的第三方Framework、Swift 动态库

│ ├── PlugIns // 当前应用使用的 Extension

│ ├── Assets.car // 资源文件

│ ├── ...

├── iTunesArtwork

└── iTunesMetadata.plist

2.2 Xcode 编译过程(图为Xcode 11.2的编译过程,字为小黄书的内容)

—> 1. 编译源文件:使用 Clang 编译项目中所有参与编译的源文件,生成目标文件

—> 2. 链接目标文件:将目标文件链接成一个可执行文件

—> 3. 复制编译资源文件:例如 storyboard 文件

—> 4. 生成 plist 文件

—> 5. 复制图片资源

—> 6. 生成 dSYM 文件

—> 7. 签名:使用Emtitlements文件对App进行签名

-> 8. 打包

2.3 通过命令生成一个 ipa 包

makefile:

CurrentDir = "$(shell pwd)"
ResourceDirecrory = AppSource
AppName = DemoApp
TmpBuildFile = $(AppName).app
ConstIBFile = Base.lproj
Architecture = arm64
CertificateName = "iPhone Development: XXXXXX (XXXXXX)"

compile:
    #0、创建BuildDemo.app文件
    @rm -r -f $(TmpBuildFile)
    @test -d $(TmpBuildFile) || mkdir $(TmpBuildFile)

    #1、Compile Objective-C file
    @#如果不用xcrun直接用clang,需要用-isysroot指定系统SDK路径,如/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

    @xcrun -sdk iphoneos clang \
        -arch $(Architecture) \
        -mios-version-min=8.0 \
        -fmodules \
        -fobjc-arc \
        -c $(ResourceDirecrory)/AppDelegate.m \
        -o $(TmpBuildFile)/AppDelegate.o

    @xcrun -sdk iphoneos clang -arch $(Architecture) -mios-version-min=8.0 -fmodules -fobjc-arc -c $(ResourceDirecrory)/main.m -o $(TmpBuildFile)/main.o
    @xcrun -sdk iphoneos clang -arch $(Architecture) -mios-version-min=8.0 -fmodules -fobjc-arc -c $(ResourceDirecrory)/ViewController.m -o $(TmpBuildFile)/ViewController.o
    
link:
    #2、Link Object file
    @xcrun -sdk iphoneos clang \
        $(TmpBuildFile)/main.o $(TmpBuildFile)/AppDelegate.o $(TmpBuildFile)/ViewController.o \
        -arch $(Architecture) \
        -mios-version-min=8.0 \
        -fobjc-arc \
        -fmodules \
        -o $(TmpBuildFile)/$(AppName)

    @rm $(TmpBuildFile)/AppDelegate.o $(TmpBuildFile)/main.o $(TmpBuildFile)/ViewController.o

storyboard:
    #3、编译storyboard文件
    @mkdir $(TmpBuildFile)/$(ConstIBFile)

    @ibtool \
        --compilation-directory \
        $(TmpBuildFile)/$(ConstIBFile) \
        $(ResourceDirecrory)/$(ConstIBFile)/Main.storyboard

    @ibtool --compilation-directory $(TmpBuildFile)/$(ConstIBFile) $(ResourceDirecrory)/$(ConstIBFile)/LaunchScreen.storyboard

plist:
    #4、plist : App ID、name、version ...
    
    @defaults write \
        $(CurrentDir)/$(TmpBuildFile)/Info \
        CFBundleDevelopmentRegion en #国际化时优先使用的语言

    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundleExecutable $(AppName)
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundleIdentifier com.alonemonkey.$(AppName)
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundleInfoDictionaryVersion 6.0 #plist文件结构的版本
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundleName $(AppName)
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundlePackageType APPL #APPL: app,FMWK: frameworks,BND: loadable bundles
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundleShortVersionString 1.0
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info CFBundleVersion 1
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info LSRequiresIPhoneOS YES
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info UIMainStoryboardFile Main
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info UILaunchStoryboardName LaunchScreen
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info MinimumOSVersion 8.0
    @defaults write $(CurrentDir)/$(TmpBuildFile)/Info DTPlatformName iphoneos

asset:
    #5、复制图片资源
    @cp -a $(ResourceDirecrory)/images/. $(TmpBuildFile)/

dsym:
    #6、生成dSYM文件
    @#使用`dwarfdump --uuid `可以查看dSYM或可执行文件的UUID,匹配成功才能完全将crash log中的16进制地址符号化
    @dsymutil \
        -arch $(Architecture) \
        $(TmpBuildFile)/$(AppName) \
        -o $(AppName).app.dSYM

codesign:
    #7、签名
    @#mobileprovision文件包含Team ID和允许安装设备的ID
    @cp -f embedded.mobileprovision $(TmpBuildFile)
    @#provision查看命令:security cms -D -i provision_file

    @codesign \
        -fs \
        $(CertificateName) \
        --entitlements entitlements.plist \
        $(TmpBuildFile)
    @#使用codesign -vv xx.app 命令查看App签名信息

package:
    #8、打包ipa
    @mkdir -p Payload
    @cp -r -f $(TmpBuildFile) Payload
    @zip -r -q $(AppName).ipa Payload
    @rm -f -r Payload/
    @rm -f -r $(TmpBuildFile)


all: compile link storyboard plist asset dsym codesign package

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 硬盘是由一个个圆形的盘片组全起来的,从物理特性上看,硬盘盘片的转速越快,它的性能就越好,而且我们的磁道越靠外部,它...
    zejin阅读 673评论 0 1
  • 一个基本的计算机系统由“硬件”和“软件”组成,一台Linux设备,主要的组成如下图所示: 一般情况下,我们所说的L...
    时待吾阅读 1,642评论 0 16
  • 文件系统 Mac的文件系统大致可以分为两种: 符合Unix传统的目录 /bin包含基本的用户命令,可被所有用户使...
    cuzzy阅读 1,914评论 0 2
  • Filesystem Hierarchy Standard 文件系统层次化标准(以下简称FHS) FHS为类UNI...
    _Joeyoung_阅读 4,078评论 3 2
  • 中文乱码解决办法 因软件设置编码或服务器安装语言,导致显示乱码时,可按如下方式解决 界面展示乱码 image.pn...
    Lv_0阅读 275评论 0 1