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。
- 提交包到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搜索,一般研究两到三个,就可以找到你想要的。