iOS工作小技巧及填坑记录

时间:2022-09-07 10:03:20

以下是本人在iOS开发工作中使用的一些小技巧,记录一下。

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

在IOS开发的项目中有一个XX_Prefix.pch

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

还有就是可以再这里面放入宏,在整个工程中都可以用.

添加方法:

iOS工作小技巧及填坑记录

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

iOS工作小技巧及填坑记录

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

XX_Prefix.pch文件中引入hello.h

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

在iOS开发中,如何实现从app1打开app2。

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

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

iOS工作小技巧及填坑记录

2. 在app1的代码中打开刚才定义的URL,代码如下:

  NSURL *url = [NSURL URLWithString:@"myapp://test?para1=1¶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也自增,一般不需要

iOS工作小技巧及填坑记录

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

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

或者

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

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

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

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

终端输入:

cd /Applications/Xcode.app/
sudo chown -hR root:wheel Contents

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

iOS工作小技巧及填坑记录

9.cocoapods升级或者降级:

升级:

sudo gem update --system  //更新gem
sudo gem install cocoapods
pod setup pod --version //查看版本

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

iOS工作小技巧及填坑记录

在*搜到的解释是这样的,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  //选择哪个版本,之后Y
sudo gem install cocoapods -v 0.34.4   //选择那个版本
                           

其中的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如图所示:

iOS工作小技巧及填坑记录

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

iOS工作小技巧及填坑记录

依然报红,可以archive打包成ipa,但是无法连接手机测试观察,按照网上给的很多方法依然无效.只能:

新建一个全新项目,把原来的库重新导入新工程一次,一般新工程里面的libPod.a就是正常的了,如果非正常就是Cocoapods的原因了.如果正常就把新工程的libPod.a文件手动拷入原来的工程之中.

原工程仍然报红,但是可以连接手机测试了.

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

iOS工作小技巧及填坑记录

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
开发商旗下 App
iOS: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失效:

iOS工作小技巧及填坑记录这里的GEM_PATH会显示为空

解决方案1:

终端里输入:gem env

可以查到gem的安装路径,找到SHELL PATH,如:

iOS工作小技巧及填坑记录

接着依次试一下上面的这些路径.(这个方案我没用亲自试过,太麻烦)

解决方案2:

终端输入:sudo gem install -n /usr/local/bin cocoapods

安装完成之后,接着在cocoapods插件的GEM_PATH里写入    /usr/local/bin    即可

(这个方案亲测可用)

15.使用Xcode查看不同机型下的UI效果图.

1.首先打开storyboard或者xib,点击左上角的符号(如下图1中),接着Preview,然后按住option+shift键,选择你想要查看的视图文件.

iOS工作小技巧及填坑记录

2.接着会跳出下面的视图.双击+号

iOS工作小技巧及填坑记录

3.OK,接着右面会弹出各尺寸的效果图.点击+号可以添加机型

iOS工作小技巧及填坑记录

16.查找私有api字段:

有时在上传APP Store时会报使用私有API的问题,解决方案:

cd  到项目文件夹

grep -r XXXX

上面就是查找私有字段XXXX所在的目录

17.出现Unable to copy asset information from https://mesu.apple.com/assets/for asset type com.apple.MobileAsset.TextInput.SpellChecker 或者copy matching assets reply或者Daemon configuration query reply字样,如:

iOS工作小技巧及填坑记录

我的解决方案:在storyBoard中,修改TextView中的correction和spell Checking 为NO.如:

iOS工作小技巧及填坑记录

18.查看plist文件中key的正确原始值:

iOS工作小技巧及填坑记录

19.修改github上面的源码类型显示.如

iOS工作小技巧及填坑记录

1.打开命令行,cd 到本地仓库的项目根目录.然后新建一个文件 .gitattributes

touch .gitattributes

2.用文本编辑器打开该文件,如果隐藏,需要先  打开隐藏文件显示(第10)

然后输入

*.h linguist-language=swift
*.m linguist-language=swift

  意思就是将.h 和.m文件当作Swift语言来统计,简单粗暴。

3.再次提交改变到github上即可.  

20. 图片模糊处理

iOS工作小技巧及填坑记录

写个扩展实现模糊:

 import UIKit

 extension UIImage{
func blurImage(value:NSNumber) -> UIImage{
let content = CIContext.init(options: [kCIContextUseSoftwareRenderer:true])
let ciImage = CoreImage.CIImage.init(image: self)
let blurFiter = CIFilter.init(name: "CIGaussianBlur")
blurFiter?.setValue(ciImage, forKey: kCIInputImageKey)
blurFiter?.setValue(value, forKey: "inputRadius")
let imageRef = content.createCGImage((blurFiter?.outputImage)!, from: (ciImage?.extent)!)
let newImage = UIImage.init(cgImage: imageRef!)
return newImage
} }

使用:

        blurImage.image = UIImage.init(named: "pic.jpg")?.blurImage(value: )

21.网友的多年开发总结:http://www.jianshu.com/p/1ff9e44ccc78

22.cocoapods在升级,安装三方库,降级等操作发生错误:

ERROR: While executing gem ...(Error::EPERM)

Operation not permitted - /usr/bin/update_rudygems

如图

iOS工作小技巧及填坑记录

使用命令即可:

sudo gem install -n /usr/local/bin cocoapods --pre

OK成功了,现在版本是最新的,也可以使用正常.

23.判断该界面是push过来的还是present过来的.

    NSArray *viewcontrollers=self.navigationController.viewControllers;
if (viewcontrollers.count>1) {
if ([viewcontrollers objectAtIndex:viewcontrollers.count-1]==self) {
//push方式 }
}
else{
//present方式 }

24.大神博客,学习网站 

KenshinCui KenshinCui

唐巧的博客

标哥的笔记博客

Bison的技术博客

KeanuZhang

HeartPower

黄文臣的专栏

阿曌

一大推博客

航歌

swiftV课堂

爱酷学习网

sunnyxx

Garan no dou

招聘一个靠谱的 iOS

刘坤的技术博客

gf&zjの盗梦空间

Hexo

玉令天下的博客

美团点评技术团队

慕课网

.....

25.runloop学习

https://blog.ibireme.com/2015/05/18/runloop/#base

http://v.youku.com/v_show/id_XODgxODkzODI0.html

26.runtime学习

http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/

Method Swizzling

https://www.valiantcat.cn/index.php/2017/11/03/53.html

27.多线程学习

https://ke.qq.com/course/224900

http://www.jianshu.com/p/2d57c72016c6

28.深入理解Objective-C:Category

美团点评技术团队对Category的总结:https://tech.meituan.com/DiveIntoCategory.html

29.动画学习 swift3.0一些动画基础整理

Quartz 2D

动画

Bison的技术博客

动画一大堆

       动画一小堆  

30.iPhone X刘海打理指南:

美团点评技术团队

LEE's博客关于iPhone X的适配

iOS11安全区域适配总结

适配iOS11&iPhoneX的一些坑

 简书适配iOS11

.......

31.网络基本知识

TCP/IP 系列文章
[网络基础知识(-)](http://www.jianshu.com/p/885201e68707)
[TCP/IP基础知识(二)](http://www.jianshu.com/p/21c24dc84a50)
[物理层(三)](http://www.jianshu.com/p/5299766420e8)
[数据链路层(四)](http://www.jianshu.com/p/4afc43f0b015)
[IP 协议(五)](http://www.jianshu.com/p/6f89a0dc3141)
[IP 协议相关技术(六)](http://www.jianshu.com/p/7b445133aa1f)
[TCP与UDP(七)](http://www.jianshu.com/p/7fa4ae2cc73a)

32.IM知识详解

http://www.52im.net/

33.iOS离屏渲染

学习笔记

学习文档

相关技巧

渲染优化

UITableView优化

34. JSON和XML的异同

35.iOS 编译期 运行期

1

2

36.为何要这样?

当修饰可变类型的属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong。

当修饰不可变类型的属性时,如NSArray、NSDictionary、NSString,用copy。

37.iOS中的三个定时器.

38.ARC模式下,使用Core Foundation也需要内存管理.

39.长短链接简介

    短链接使用场景: 常见的网页浏览,app页面展示,适用于网页浏览等数据刷新频度较低的场景.

    长链接使用场景: 适用于客户端和服务端通信频繁的场景,例如聊天室,实时游戏等,Socket的基本使用.

39.经典面试题

40.导出电脑公钥

1.检查本机是否已有公钥

$ cd ~/.ssh
2.如果电脑中有以前遗留的密钥,将其删除掉

$ mkdir key_backup

$ cp id_rsa* key_backup

$ rm id_rsa*
3.生成新的公钥

$ ssh-keygen -t rsa -C "邮箱地址"
4.查询

cat ~/.ssh/id_rsa.pub

41.Xcode出现 黄色警告 Treating Unicode character as whitespace

因为在复制粘贴代码时出现不规则的换行导致,只需要在xcode中重新换行即可.

42.RunLoop的一个常用点, 用户交互和NSTimer的问题. 把timer加到runloop中的该模式下.

[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

 43.iOS cell高度自适应
iOS8以上:
 

UITableView * tabelView  =  [[UITableView alloc]init];

tabelView.estimatedRowHeight = 64;

tabelView.rowHeight = UITableViewAutomaticDimension;

计算label高度:
写一个NSString的Category:

NSString+height.h

//
// NSString+height.h
// lockView
//
// Created by Shaoting Zhou on 2018/1/31.
// Copyright © 2018年 Shaoting Zhou. All rights reserved.
// #import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface NSString (height)
-(CGFloat)heightWithText:(NSString *)text font:(UIFont *)font width:(CGFloat )width;
@end

NSString+height.m

//
// NSString+height.m
// lockView
//
// Created by Shaoting Zhou on 2018/1/31.
// Copyright © 2018年 Shaoting Zhou. All rights reserved.
// #import "NSString+height.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> @implementation NSString (height) -(CGFloat)heightWithText:(NSString *)text font:(UIFont *)font width:(CGFloat )width{
NSDictionary * dic = @{NSFontAttributeName:font};
CGSize size = [text boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:(NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin) attributes:dic context:nil].size;
return size.height;
}
@end

使用:

    NSString * str = @"2222222222222222222222222222222222";
CGFloat ff = [str heightWithText:str font:[UIFont systemFontOfSize:12] width:40];
NSLog(@"%f",ff);

44.NSRunLoop 在子线程上需要手动开启:

[[NSRunLoop currentRunLoop] run];

同时,子线程的定时器,需要在子线程上invalidate,不要在主线程,否则会造成runLoop资源的浪费.

45.SourceTree每次推拉代码都需要输入两次密码.

iOS工作小技巧及填坑记录

iOS工作小技巧及填坑记录

主要是在http://  加上  git用户名:密码@ 即可.然后一路确定即可.

46.xcode 安装真机 出现 App instanllation failed.如图

iOS工作小技巧及填坑记录

这个看似很明确的问题,其实是个巨大无比的坑.

我一开始,先添加了新的描述文件===无效

    新建立证书===无效

    听信网上谣言,改xcode版本===无效

    清除xcode缓存===无效

    修改手机时间===无效

    换网络环境===无效

    然后看网上说,product name需要英语,不能为汉字.可我的就是英语啊.但我的有_存在.

我试着删除_,运行.马丹,竟然就好了.........

iOS工作小技巧及填坑记录

浪费我两天时间.......码农不易,且行且悲哀!!!

47. 使用carthage拉取三方库时: carthage update.

iOS工作小技巧及填坑记录

找到 /var/folders/8r/l6swljzd11gg11mgt_9s6c400000gn/T/carthage-xcodebuild.9QXfgA.log 文件.

发现:

iOS工作小技巧及填坑记录

 直接把该库版本删除或者提高即可.

48.iOS 上传App Store发生 'XXXXX' has one iOS Distribution certificate but its private key is not installed .contact the creator of this certificate to get a copy of the private key.

iOS工作小技巧及填坑记录

点击Manage Certificates...

iOS工作小技巧及填坑记录

然后重新+一个就好了......

49.TestFlight 上传过程中出现communication error.please use diagonstic mode to ........TCP port 443.

iOS工作小技巧及填坑记录

我的问题是一开始我科..学..上..网了.然后到一半我退掉了科...学..上网.出现的.解决方法全程关闭科..学..上..网




iOS工作小技巧及填坑记录的更多相关文章

  1. React Native工作小技巧及填坑记录

    以下是本人在React Native开发工作中使用的一些小技巧,记录一下. 1.从网络上拉取下来的React Native缺少React和React Native库. 终端 1. cd 项目根目录 2 ...

  2. 微信小程序开发技巧及填坑记录

    以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...

  3. iOS:小技巧(不断更新)

    记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...

  4. iOS:小技巧(19-02-12更)

    记录下一些不常用技巧,以防忘记,复制用. 1.UIImageView 和UILabel 等一些控件,需要加这句才能成功setCorn _myLabel.layer.masksToBounds = YE ...

  5. webapp填坑记录&lbrack;更新中&rsqb;

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  6. webapp填坑记录

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  7. iOS开发小技巧 - UILabel添加中划线

    iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...

  8. iOS开发小技巧 - runtime适配字体

    iOS开发小技巧 - runtime适配字体 版权声明:本文为博主原创文章,未经博主允许不得转载,有问题可联系博主Email: liuyongjiesail@icloud.com 一个iOS开发项目无 ...

  9. Phoenix踩坑填坑记录

    Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...

随机推荐

  1. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  2. Android Studio配置Dagger2 以及butterknife

    一.配置butterknife 在build.gradle(Module)文件中的dependencies模块添加: dependencies { // add butterknife compile ...

  3. bzoj1821

    题目要求最近的两个部落间距尽可能最远 不难想到一种贪心的方法,对每两个点之间距离从小到大排序, 把每个点看成一个部落 然后不断将距离近的两个部落合并成一个部落,直到剩下了k个部落,那么下一条不同部落之 ...

  4. Content Providers

    Content providers manage access to a structured set of data. They encapsulate the data, and provide ...

  5. HttpWebRequest&period;GetResponse&lpar;&rpar; raises exception when http status code 400 &lpar;bad request&rpar; is returned

    参考: .Net HttpWebRequest.GetResponse() raises exception when http status code 400 (bad request) is re ...

  6. 欧拉函数K - Relatives

    欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n). 特殊性质:当n为奇数时,φ(2n)=φ(n), φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..( ...

  7. EBS库存(INV)模块常用表

     select * from org_organization_definitions库存组织 select * from mtl_parameters组织参数 select * from mtl ...

  8. Overview of Azure Storage

    Azure Storage types Blob storage. Containers for data blobs. The three types of blobs are: Page blob ...

  9. linux 下shell脚本备份文件

    以下是shell自动备份用的: 主要功能: 1)将pathSrc目录中的文件拷贝到pathDst目录中去. 具体步骤:先查询源目录和目标目录中的文件,分别存在fileSrc和fileDst中. -&g ...

  10. java文章标题及文章相似度计算hash算法实现

    参看了 https://github.com/awnuxkjy/recommend-system 对方用了 余弦 函数实现相似度计算,我则用的是 hanlp+hash 算法(Hash算法总结) 再看服 ...