这两天的objective-c和Xcode学习总结——2017.11.06

前段时间接触到一些东西,感触颇深,以后有空再说,几个字总结:”给bin佬递上一杯卡布奇诺!”
由于前段时间的工作原因,让我在家休息的时候也没办法安心搂着老婆睡觉,速速打开电脑开始学习OC,希望能利用好手上的资源。

两天时间干不了太多东西,不过也踩了好几个坑了。
首先当时熟悉下OC的语法,这个没啥好说的,看看文档教程就可以了。记录下遇到的几个坑。

1.不知道怎么编译ios的command program,在Xcode上build只是mac上的x86_64程序,没有办法在越狱的ios上运行,CPU架构问题,复制下网上的分类

  • 模拟器32位处理器测试需要i386架构
  • 模拟器64位处理器测试需要x86_64架构
  • 真机32位处理器需要armv7或者armv7s架构
  • 真机64位处理器需要arm64架构
  • arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad
    Air| iPad mini2(iPad mini with Retina Display)
  • armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
  • armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod
    Touch 3G|iPod Touch4

工作中碰到的都是iphone5s以上的,所以编译arm64一般就够了
编译一个简单的求和程序,保存OC的代码文件sum.m

#import <Foundation/Foundation.h>

//接口
@interface NumberSum:NSObject
{
    int n;
}
-(void)setN:(int)_n;
-(int)sum;
@end

//行为
@implementation NumberSum
-(void)setN:(int)_n
{
    n = _n;
}
-(int)sum
{
    int s = 0;
    for ( int i =1;i<=n;i++ )
    {
        s+=i;
    }
    return s;
}
@end

//实现
int main(int argc, const char * argv[])
{
    @autoreleasepool{
        NumberSum * sum = [[NumberSum alloc]init];
        [sum setN:100];
        int s=[sum sum];
        NSLog(@"%d",s);
    }
}

使用clang编译,-arch添加架构,,-arch参数不能用逗号(-arch arm64,armv7,armv7s),-F是对应的框架Foundation。

xcrun -sdk iphoneos clang -arch arm64 -arch armv7 -arch armv7s -F Foundation -fobjc-arc -c sum.m -o sum.o

xcrun -sdk iphoneos clang sum.o -arch arm64 -arch armv7 -arch armv7s -fobjc-arc -framework Foundation -o sum

可以看到现在编译生成的文件就支持arm64,armv7,armv7s了

把程序scp到越狱的5s上,开始第二个坑了。

2.编译的程序没有签名没有办法运行

第二个坑如下图

查了下,因为需要signal才能运行
签名原理:iOS App 签名的原理

看起来原理很复杂,但是操作流程还是蛮简单的
mac下钥匙串访问

左上角钥匙串访问-》证书助理-〉创建证书

证书名称随意,证书类型选择代码签名即可,然后在接下来的提示中全部默认点下一步即可
创建后,cd到编译出来的程序目录,执行签名命令,sum文件就有签名了。

codesign -fs ios ./sum    

![](media/15440871658588/15441697080958.png)

scp到5s上,可以成功执行

到这一步后,就是开始写更复杂的OC程序了。
因为一切都是从头开始,之前也没接触过C语言,感觉举步维艰,不过静下心后发现还好。
因为心里面是有目的的,所以也没有学太多的OC基础课程(Python也是这样开始学的),直接去找项目相关的知识材料怼了。
上来就遇到个难题,ios的程序避免不了实用第三方库,所以在使用第三方库上也折腾了下。
Xcode上的第三方库的包管理工具是Cocoapods,也就是类似于Python上的pip。
安装方法比较简单

1.sudo gem install cocoapods
2.pod setup //此步骤时间比较久

安装完成后,就可以去安装第三方库了。不过我使用Cocoapods搜索库时出现一个问题,第三个坑。

3.Cocoapods没办法正常运行

JSON::ParserError - A JSON text must at least contain two octets!

去Github上,搜了下issue,发现解决方法,删除下面的json文件,然后重新搜索就ok了!

rm -rf ~/Library/Caches/CocoaPods/search_index.json

搜索命令

pod search 库名称
Example:pod search SSZipArchive

已经看到目标的库,安装方式又是另外一个样子
cd到你自己的工程目录下(与xxx.xcodeproj同级目录),新建一个文件,文件名”Podfile”
填充内容如下格式

Template:
platform :ios, '系统版本'

target '项目名称' do
    pod '库名', '~>库版本'
end
——————————————分割线——————————————
Example:
platform :ios, '8.0'

target 'iosqqtest' do
    pod 'SSZipArchive', '~> 2.1.1'
end

到此,目前就踩过这三个坑,接下来肯定又是一大堆坑,不过慢慢来吧,希望能在接下来的一个星期内,完成我的小项目。