记录

1.使用XXX.pch文件便捷开发+加速Build

在IOS开发的项目中有一个XX_Prefix.pch
XX_Prefix.pch:扩展名.pch表示"precompiled header",这是一个你工程要用到的来自于外部框架的头文件列表。xcode将编译这些头到文件,这将减少你在选择Build 或Build and Go时编译项目的时间。通常用到的头文件已经自动包含了pch,系统编译每个.m文件前,都会先imort这个文件。这样就节省了添加include的时 间,相当于加速编译
还有就是可以再这里面放入宏,在整个工程中都可以用.
添加方法:


在targets->Build Setting中Apple LLVM 7.0 - language中做如下修改

例如在一个项目中有一个hello.h文件,需要在所有.m文件中都要包含这个文件就可以在
XX_Prefix.pch文件中引入hello.h

2.在一个应用中打开其他应用.

在iOS开发中,如何实现从app1打开app2。
基本的思路就是,可以为app2定义一个URL,在app1中通过打开这个URL来打开app2,在此过程中,可以传送一些参数。下面来讨论一下具体的实现过程。

  1. 在app2的info.plist中定义URL,就是在文件中添加URL types一项。可按下图进行添加。


  2. 在app1的代码中打开刚才定义的URL,代码如下:
    1 NSURL *url = [NSURL URLWithString:@"myapp://test?para1=1¶2=2"]; 2 [[UIApplication sharedApplication] openURL:url];

当然,这个URL的形式可以是其他形式的,只要以"myapp://"开始即可。
这样,就可以在app1中打开app2.
打开之后,会调用app2的AppDelegate的

  • (BOOL)application:(UIApplication )application openURL:(NSURL)url sourceApplication:(
    NSString*)sourceApplication annotation:(id)annotation

由于URL是自己定义的,所以会存在URL重复的情况。经过测试发现,如果试图打开这个URL,那么会打开先安装的那个应用.

3.在Xcode中使项目的Build随项目的启动而递增.

在下图所示位置加入
version=/usr/libexec/PlistBuddy -c "Print CFBundleVersion"$PRODUCT_SETTINGS_PATH
version=expr $version + 1

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $version"$PRODUCT_SETTINGS_PATH

/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $version"$PRODUCT_SETTINGS_PATH 这行代码会让version也自增,一般不需要

4.界面跳转.如电商项目中,A:商品界面(不是rootViewController)B:付款界面C:订单界面,想直接从C跳到A(中间跳转没有出现B的过渡效果),这时使用popToViewController时不行,popViewControllerAnimated也不行的情况下.可以使用:

[self.navigationController popToViewController:[self.navigationController.viewControllersobjectAtIndex:1] animated:YES];

或者
for (UIViewController *controller inself.navigationController.viewControllers) {
if([controller isKindOfClass:[你要跳转到的Controller class]]) {
[self.navigationController popToViewController:controller animated:YES];
}
}

5.如何判断一个页面是web页面还是iOS原生页面.

长按界面,如果出现可复制的界面就是web界面.

6.在Xcode里如何保证不会因为手残改动了系统的源生源码文件(降低权限).

终端输入:
cd /Applications/Xcode.app/sudo chown -hR root:wheel Contents

7.使用Cocoapods导入的第三库文件,发现import无法提示.

9.cocoapods升级或者降级:

升级:
sudo gem update --system
//更新gem

sudo gem install cocoapods

pod setup

pod --version
//查看版本

最近把mac系统升级到10.11系统,但是在用pod install命令的时候,却提示command not found或者:



在stackoverflow搜到的解释是这样的,This is happening because Apple has enabled rootless on the new install,也就是说在10.11系统上苹果已经启用无根的安装.
所以,保证Cocoapods在OS X 10.11系统上的正常使用,我们需要在命令行输入这样一句话:

sudo gem install -n /usr/local/bin cocoapods
 
降级:

sudo gem uninstall cocoapods
//选择哪个版本,之后
<code>sudo gem install cocoapods -v 0.34.4</code>
//选择那个版本

其中的Podfile文件最好是用Xcode编写,省的报错.

10.Xcode在archive时出现no identity found:

1.首先确定开发者账号的相应证书和描述文件是否是最新,打开钥匙链删除旧版,更新新版
2.Xcode->prefrence->Accounts.重新添加appid,把多余的描述文件删除,重新下载新的描述文件.
3.整改项目里面的code Signing identify和PP文件.
4.clean一下.

11.因为Cocoapods导致有些工程会出现liarary not funnd for -lPods如图所示:


同时,在相应位置处,其他导入的库正常,只有这个报红现象,右键show in finder也没反应.哪怕重新添加或者重新是用Cocoapods再次导入也无济于事.



依然报红,可以archive打包成ipa,但是无法连接手机测试观察,按照网上给的很多方法依然无效.只能:
新建一个全新项目,把原来的库重新导入新工程一次,一般新工程里面的libPod.a就是正常的了,如果非正常就是Cocoapods的原因了.如果正常就把新工程的libPod.a文件手动拷入原来的工程之中.
原工程仍然报红,但是可以连接手机测试了.

12.用xml格式打开xxx.plist.

13.点击按钮直接跳转至APP store相应APP的下载页面.

以微信为例,想要点击按钮跳转到APP store的微信下载页面.
最为关键的是跳转链接,这里的链接不是像https://appsto.re/cn/S8gTy.i这种.也不是
https://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8(这种跳转中间会有Safari的过渡)
如果想要直接跳转至微信的下载页面,可以把https://换为itms:// 或者 itms-apps://.如:itms-apps://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8
这种可以直接跳转至APP store的下载页面.其中链接可以使用Mac的APP store或者iTunes获取.
为了让开发者宣传自己产品时,下载地址更简短易记,苹果开放了 appstore.com “短” 链接服务。规则如下:
开发商主页
iOS:https://appstore.com/<公司名>,比如,http://appstore.com/smule
Mac:https://appstore.com/mac/<公司名>,比如,http://appstore.com/mac/popcap

应用下载地址iOS:https://appstore.com/<应用名>,比如http://appstore.com/ocarina
Mac:https://appstore.com/mac/<应用名>,比如,http://appstore.com/mac/peggle

开发商旗下 AppiOS:https://appstore.com/<公司名>/<应用名>,比http://appstore.com/smule/ocarina
Mac:https://appstore.com/mac/<公司名>/<应用名>,比如,http://appstore.com/mac/popcap/peggle

评论App跳转页面:itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=448165862

14.使用AFNetworing 3.0报错信息为:unacceptable content-type: text/html"

对应到自己的项目里面,我用的是AFNetworking这套网络请求包,需要改的是:

AFURLResponseSerialization.m文件

226行:

self.acceptableContentTypes =[NSSetsetWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", nil];
加上蓝色部分,其实就是添加一种服务器返回的数据格式。

15.因为Mac系统升级和Xcode升级导致Cocoapods失效.

1.如果只是Xcode升级导致Cocoapods失效只需在终端中:
(这里最好先打开Xcode)
a.先获取到UUID:
defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
如: XXXX-XXXX-VVVDF-JHFF
b.find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add 这里加上上面的UUID
如:find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add XXXX-XXXX-VVVDF-JHFF
c.把Xcode完全退出,接着重启,会弹出是否加载插件界面,加载插件即可.
2.因为Mac系统升级导致Cocoapods失效:

这里的GEM_PATH会显示为空
解决方案1:
终端里输入:gem env
可以查到gem的安装路径,找到SHELL PATH,如:

接着依次试一下上面的这些路径.(这个方案我没用亲自试过,太麻烦)
解决方案2:
终端输入:sudo gem install -n /usr/local/bin cocoapods
安装完成之后,接着在cocoapods插件的GEM_PATH里写入 /usr/local/bin 即可
(这个方案亲测可用)

去除 UserInterfaceState.xcuserstate 文件为版本控制带来的困扰

        ------- git-------

*一、在同 .Git目录下创建.gitignore文件。在文件中加入如下内容:
*.xcuserstate
project.xcworkspace
xcuserdata
UserInterfaceState.xcuserstate
project.xcworkspace/
xcuserdata/
UserInterface.xcuserstate

二、退出xcdoe, 打开终端(Terminal),进入项目目录下。
三、在终端键入 git rm --cached [YourProjectName].xcodeproj/project.xcworkspace/xcuserdata/[ YourUsername].xcuserdatad/UserInterfaceState.xcuserstate
四、在终端键入 git commit -m "Removed file that shouldn't be tracked"
五、重新打开Xcode commit, push。

       ------- svn-------

假设UserInterfaceState.xcuserstate在下面的目录下面:
~/工程目录/工程名字.xcodeproj/project.xcworkspace/xcuserdata/用户名.xcuserdatad
打开终端执行以下命令即可:
1.cd ~/工程目录/工程名字.xcodeproj/project.xcworkspace/xcuserdata/用户名.xcuserdatad
2.svn rm --force UserInterfaceState.xcuserstate [如果svn命令不能执行,请安装xcode中的命令行工具或用Spotlight查找svn所在]
svn update [可能需要]
svn commit -m "忽略该死的UserInterfaceState.xcuserstate"
3.export EDITOR=nano [注释:这是bash下]
4.svn propedit svn:ignore . [注意后面有个点号,代表本目录]
5.第4步执行完了会弹出nano编辑界面,复制粘贴UserInterfaceState.xcuserstate后按Ctrl+X输入Y保存即可.
6.输入svn status就发现不显示UserInterfaceState.xcuserstate了.证明修改成功.

Reveal使用

2、在左边底部面板,点击"+"号按钮,然后选择“Add Symbolic Breakpoint”。
3、在Symbol字段里面填入“UIApplicationMain”。
4、点击“Add Action”按钮,并确认一下“Action”是设置到“Debugger Command”。
5、在Action下的文本框中贴入如下表达式
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px 'Helvetica Neue'}span.s1 {font-kerning: none}

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void )dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void)0)

打开 Xcode生产的 .xcactivitylog文件转为 .log

(位置) Xcode stores debug logs at
~/Library/Developer/Xcode/DerivedData/<YOURAPP>/Logs/Debug/
The .xcactivitylog files are actually just gz archives. Decompress them:

cd ~/Library/Developer/Xcode/DerivedData/<YOURAPP>/Logs/Debug/
EXT=".xcactivitylog"
for LOG in *.xcactivitylog; do
NAME=basename $LOG $EXT
gunzip -c -S $EXT "${NAME}${EXT}" > "${NAME}.log"
done

Now you can easily search them using grep or Spotlight or what your prefer.

[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance

这个是由于传的参数类型不对所导致,找了半天才找到原因。
比如 [cell setColumnTitle:[homeData objectAtIndex:row]];
这里其实是要传NSString类型,而其实返回的是NSArray类型,这个错误不会立即出发,而是过一段时间再出发,所以不好定位。

The file “xxx-Info.plist” couldn’t be opened because there is no such file

我们有时候将网上下载或者是别人的项目拷到自己电脑上运行时会出现 The file “xxx-Info.plist” couldn’t be opened because there is no such file这个问题,这就是你在拷贝的时候位置变化了,所以没有找到这个plist文件,解决的办法

1.png
2.png

找到info.plist本地位置直接拖到这两个位置上,

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

推荐阅读更多精彩内容