iOS小结

该博客围绕iOS开发展开,介绍了iOS icon素材生成网址及Python脚本制作方法,阐述出包流程、ipa文件安装、证书与描述文件查看等内容。还提及Xcode、系统环境与框架、依赖库、生命周期等知识,以及提交包到App Store流程、ipa逆向、自动化出包和代码混淆等技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,iOS icon素材生成网址(iOS icon强制适配十几个图,如果每次要求UI提供,能打死你)
http://icon.wuruihong.com/
也可以自己写个python脚本,注意命名规则与生成的icon大小

2,iOS出包流程,新建一个Xcode工程为例

1,打开Xcode工程,进入工程属性配置(左上角)——>Edit Scheme——>Build Configuration配置Release
2,  查看General下,Automatically manage signning状态取消,另外看下应用配置name,version等版本以及下面的签名配置是否ok。
3,检查完毕之后,Commend+B可以直接编译运行。
4,找到工程目录下Products目录下会生成一个Demo.app文件,打开该文件目录拷贝到一个命名为Playload文件夹内。
5,压缩Playload文件重命名其后缀名为.ipa即可。

注意事项:出包时设备信息选择全部而不是某一台设备,也就是Generic iOS Device,如果选择了某一台模拟器,或者在Build之前设置工程编译属性为Debug,都有可能在安装时出现问题。另外不要创建多台模拟器,会吃内存。

3,iOS ipa应用文件安装

1,连接iOS系统设备,打开itunes找到应用可以选择iphone,ipad,ipod等
2,选择应用直接拖进来即可。
3,如果itunes软件版本过高,目前最新版本苹果系统为了不让开发者下载安装包,已经屏蔽此类安装方式,解决方式可以用苹果助手,比如PP助手等
4,打开PP助手可以直接将ipa拖拽到本地应用中即可。

4,iOS证书与描述文件

1,苹果证书分为调试证书与生产证书,用法以及申请方式可上网查询。
2,描述文件可以在申请的时候,设置为包名通用的,后面对应不同工程的包名都可以编译调试(个人或企业签皆可)。
3,P12文件导入成功后可以在Mac钥匙串中找到。
4,描述文件导入之后,重命名描述文件中的UUID后并保存在~/library/MobileDevice/Provisioning Profiles文件夹内。
5,P12导入证书位置~/library/Keychains/
6,打包时会遇到导入证书有问题,可以查看一下证书是否过期。查看命令如下

查看p12证书

openssl pkcs12 -in /xxx/xxx/xxx.p12  -nodes -passin pass:"989" | openssl x509 -noout -text
#查看p12证书日期
openssl pkcs12 -in /xxx/xxx.p12  -nodes -passin pass:"989" | openssl x509 -noout -dates
#查看证书UUID和证书名称
openssl pkcs12 -in /xxx/xxx.p12  -nodes -passin pass:"989" | openssl x509 -noout -subject
#查看描述文件
openssl smime -inform der -verify -noverify -in /xxx/xxx.mobileprovision

5,关于Xcode

1,打开方式三种
	 1,.Xcodeproj文件
	 2,Xcode启动页打开project或者 .Xcodeproj
	 3,命令行打开  终端-执行cd/该工程目录下 open -a Xcode
2,Xcode 常用快捷键
    1,Commend+R 工程运行
    2,Commend+B 编译工程
    3,Commend+/ 注释

3,Xcode界面以及区域功能介绍(略)
        https://www.jianshu.com/p/3c8527898e84

6,系统环境与框架
1.Cocoa OS X与IOS操作系统的程序的运行环境。

2,Cocoa两个基本框架:

1,Foundation 基础库

2,UIKit UI库,高级对象。

面向对象 - 和java不一样的是没有垃圾回收机制,除了有C++与java的特点之外

优点:

动态类:运行时确定类的对象。

动态绑定:运行时确定需要调用的方法

动态加载:运行时为程序加载新的模块

7,iOS依赖库

1,依赖库分为静态库与动态库。
2,静态库是编译时链接到代码中,完整的copy到可执行文件中去的,多次使用就多次拷贝,容易产生代码冗余。
      动态库是运行时只加载一次,在程序调用到的地方都可以加载。
3,iOS中.a库 与 .framework库的关系
    .a 纯二进制文件
    .a +.h+sourcefile = .framework
4,系统中的.framework都是动态库,我们自己创建的都是静态库。
5,.a是不可直接使用的,需要配合.h与其他文件才能使用。framework可以直接使用。

8,iOS生命周期以及运行状态
1,共有五种状态

    1>Not running        程序未启动
    2>Inactive              前台运行
    3>Active                 激活
    4>Background        程序在后台,且能执行代码,大多数程序在进入该状态之后就直接Suspended了,不过也有特殊程序一直处于Background状态
    5>Suspended        程序在后台不能执行代码
2,AppDelegate回调函数

//启动完成,准备开始运行,一般会在这里加载一些初始化活动
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    NSLog(@"AppDelegate didFinishLaunchingWithOptions");
    return YES;
}
​
​
//进入到非活动状态,比如Home键,电话来了等
- (void)applicationWillResignActive:(UIApplication *)application {
        NSLog(@"AppDelegate applicationWillResignActive");
}
​
//进入到后台时被调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
        NSLog(@"AppDelegate applicationDidEnterBackground");
}
​
//从后台进入到前台调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
        NSLog(@"AppDelegate applicationWillEnterForeground");
}
​
//应用程序进入到活动状态调用
- (void)applicationDidBecomeActive:(UIApplication *)application {
        NSLog(@"AppDelegate applicationDidBecomeActive");
}
​
//应用程序将要退出,保存数据和一些退出前的清理工作,暂未调出,慎用!
- (void)applicationWillTerminate:(UIApplication *)application {
        NSLog(@"AppDelegate applicationWillTerminate");
}
执行顺序是启动程序,执行程序,然后Home桌面,再次启动程序
//启动应用程序
2018-03-22 16:20:05.113 Demo1[3404:103041] AppDelegate didFinishLaunchingWithOptions
2018-03-22 16:20:05.144 Demo1[3404:103041] 程序执行
2018-03-22 16:20:05.145 Demo1[3404:103041] 这里有一个log
2018-03-22 16:20:05.147 Demo1[3404:103041] AppDelegate applicationDidBecomeActive
​
//Home回到桌面
2018-03-22 16:22:46.211 Demo1[3404:103041] AppDelegate applicationWillResignActive
2018-03-22 16:22:46.678 Demo1[3404:103041] AppDelegate applicationDidEnterBackground
​
//后台重新启动
2018-03-22 16:22:55.540 Demo1[3404:103041] AppDelegate applicationWillEnterForeground
2018-03-22 16:22:56.010 Demo1[3404:103041] AppDelegate applicationDidBecomeActive

9,iOS中OC中四种数据类型
1, 基本数据类型
int float double char
2,构造类型

    数组类型,结构类型,共用体类型

3,指针类型

     所有的系统类,自定义类都是指针

4,空类型

      只有一个值nil,该类型没有名称,没有空类型的变量不能转换成空类型,但是空类型可以转换成任何引用类型。

另外补充一个类型
 5,BOOL类型,YES,NO,也就是通常意义上的非0值为YES的意思。
     注意:BOOL类型用一个8位(一个字节)的整数来表示,8位全0则为NO。
  1. 提交包到Appstore流程
 1,打开最新版本Xcode10,目前Xcode9也可以提交。
 2,点击左上角Xcode->open Developer tools->Application Load
 3,输入账号名密码,选择使用dis签名的包提交上传即可。
 4,常见审核不通过原因:
       1,2.1 苹果怀疑应用有后门开关或者已经有相似应用,如果首次提交遇到该情况,请逐条申明回复,可在网上搜有正面怼的模板。
       2,4.3 苹果审核怀疑重复应用,如果是应用首次提交可照着上面做,否则呵呵祝好运。
       3,未审核通过的ipa包180天之后会自动删除。

11,关于ipa逆向

1,如果忘记了版本号需要查看当前包的版本,可以解压缩该压缩包得到一个.app文件,右键查看内容即可进入该文件中,找到info.plist文件查看。
2,对于国内平台上架的越狱包,如果需要修改版本号则无需重新出包,参照上面再info.plist文件修改完版本号之后,重新在Payload文件夹压缩后,修改后缀为.ipa,使用签名工具进行重签名即可。注意如果是替换某些文件,在安装过该包的设备上需要卸载老包且重启才有效果(签名工具自己在github中找,如果github也不知道可以洗洗睡了)。
3,如果ipa安装时一直装不上了,很可能是签名过期了,或者重签名失败了。

12,关于iOS自动化
这个比较复杂,如果经常出包的应用只有一个,可以考虑使用自动化工具,比如fastline配置好之后,在手动导入签名文件后,可以实现一行代码搞定自动化出包。或则配置Jenkins框架(android也可以考虑使用这个框架)。如果是有多个不确定的iOS要出包,请研究下ruby,openssl,python,shell等语言一定能有一个不错的解决方式(没有研究出来,希望后来者继续,泪奔~)。


xcodebuild -list -project XXX.xcodeproj  #列出工程下所有target与Scheme
xcodebuild clean                         #清理
xcodebuild -scheme <Scheme> build        #编译
xcodebuild -target Demo(Scheme) -xcconfig configuration.xcconfig     #根据配置文件来编译
xcodebuild -scheme Demo SYMROOT="/Users/xxx/Desktop/app"          #设置一个本地Debug路径
xcodebuild -scheme Demo DSTROOT="/Users/xxx/Desktop/app" archive  #设置一个本地Release路径
通过xcodebuild -target                   #编译会输出默认的app包,下面这里可以进行release与debug的切换。

13,iOS混淆
混淆思路:如果是为了防止逆向开发者破解代码,可以考虑将所有的关键字以及类方法都混淆成乱序的方式,注意一旦混淆后就无法回滚,如果是为了马甲请出门右转,这个不是代码能解决的。可以从github搜索,一般研究两到三个,就可以找到你想要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值