
iPhone
gaoyp
这个作者很懒,什么都没留下…
展开
-
Xcode13.3 13.2以及Flutter新版本的稳定性问题
最近升级Flutter工程到null safe。被各种环境问题折磨。发现Xcode和Flutter的新版本都有很多兼容性问题。Flutter 2.10及以后版本,在arm版mac的iPhone虚拟机上粘贴功能有问题。经查说是只在虚拟机有问题,在真机没问题。结果想打包后在真机安装测试时,发现Xcode打包应用报错。需要升级pod包。打development包时,Xcode的auto签名方式各种问题,然后准备在钥匙串中手动制作开发证书时,又是一堆问题。developer.apple.com网站上也是一堆原创 2022-04-08 15:31:33 · 2788 阅读 · 0 评论 -
Xcode升到13.3以后打包应用报 Segmentation fault: 11 (in target ‘DKImagePickerController‘ from project ‘Pods‘)
Flutter工程在升级Xcode到13.3后打包应用报错如下:Segmentation fault: 11 (in target 'DKImagePickerController' from project 'Pods')但是运行不出错。最终解决:在ios目录下,运行pod update。pod install不行。参考https://github.com/flutter/flutter/issues/100142直接原因:pod库DKImagePicker原创 2022-04-08 15:15:20 · 3526 阅读 · 0 评论 -
国内的地图服务全面收费了
最近高德地图频繁给公司打电话让缴费。说是商业应用都要交费。查了一下发现国内的地图三巨头应该是商量好了,全部收费,而且起步价一样,都是5万。只要是商业应用,起步价就都是5万。调用量大的话,还有加量包。这个价格真是不便宜了。苹果还好,实在不行,还可以用系统的地图服务,免费。Android就惨了,以前听Android的同事说,Android系统连自带的定位服务都没有,需要三方库支持。查了一下,现在国内的天地图还是免费的,天地图是国家测绘局背景的,还是国家的大气。但是官网上只找到的JS SDK。网上有找原创 2022-03-19 18:52:22 · 20075 阅读 · 9 评论 -
在Apple M1 CPU的电脑上设置应用以rosetta方式运行的原理
在 M1 的 苹果电脑上配置开发环境时,很多教程会提示将XCode或Simulator设置为以rosetta的方式运行以解决编译时的问题。 一开始不是很理解,rosetta不是为了兼容老的应用,使编译为x86-64格式的老应用也能运行在M1的ARM cpu上而作的运行时转义吗?没搞明白设置应用为rosetta方式是什么意思,难道这个应用即可以按rosetta的方式运行,也可以按arm的原生的方式运行?那这个应用到底是x86格式的还是arm格式的? 后来发现可设置为...原创 2022-03-11 17:22:22 · 3933 阅读 · 0 评论 -
M1芯片的Mac上iPhone虚拟机滚动过快的问题
iOS simulator scrolling on Apple S… | Apple Developer Forumshttps://developer.apple.com/forums/thread/668488Xcode 13.1带的iPhone虚拟机在M1芯片的Mac上滚动有问题,滚动过快,而且停不下来。Xcode 13.2.1 带的虚拟机在M1上滚动就没有问题了。如果不升级Xcode,可用下面的方法解决:就是进入Xcode的Contents目录,找到Simulator,在文件的..原创 2021-12-24 10:25:20 · 2711 阅读 · 1 评论 -
可以不用在应用中实现苹果登录了
可以不用在应用中实现苹果登录了。苹果原来要求如果应用有三方登录,就必须也实现苹果账户登录。公司有应用因为这个原因被拒了。后来产品说苹果因为这个事情,被中国的公司给告了,现在苹果在中国已经不对此作要求了。前几天新应用实现了微信登录,但是并没有实些苹果登录,最后顺利过审。...原创 2021-04-27 14:24:54 · 476 阅读 · 0 评论 -
iOS应用中使用exit方法顺利过审了
经项目实证,在iOSApp中使用exit(0)的应用审核通过了。可以放心使用。按公司法务的要求,在应用启动后马上弹用户使用协议界面,如果用户不同意,则用户只能选择点击退出按钮退出应用。在应用提审时,有些担心会因次被拒,但是结果顺利审核通过。大家可以放心使用exit(0)函数了。...原创 2021-04-27 14:20:22 · 1419 阅读 · 0 评论 -
Objective-C 方法返回NSError
一、主调方:1)主调方需要取得error值NSError *error = nil;[self test:nil error:&error]; if(error){ //被调方法返回了错误 }2)主调方不关心error值[self test:nil error:nil];二、方法定义:- (id)test:(NSData *)param1 error:(NSError **)error{ //判断主调方是否传了error: if(error)和i...原创 2020-12-25 16:57:25 · 493 阅读 · 0 评论 -
Objective-C-RSA库在应用在后台时加密返回为空
Objective-C-RSARSAEncryptor中使用了key chain。下面的方法中:SecKeyRef keyRef = [RsaForSignature addPrivateKey:privKey];在读取key chain中的值时,默认的是在应用未锁屏时可读取值。所以应用在锁屏时,[RSAEncryptor encryptString:publicKey: ] 会返回空。看代码,是把publicKey先存到了key chain中,再取出来。不知道为什么要这么作。...原创 2020-12-23 17:39:43 · 486 阅读 · 0 评论 -
苹果AppStore提审时的出口合规信息相关处理
在出口合规选项上,一般的是应该选否。出口是指从美国出口到其它国家。美国的一些加密算法不充许出口。app store在美国,有出口合规证明才填 true常用的加密算法不在管制之列。应用在美国的应用商店上线,受美国的法律管辖。http://zhanglinhai.com/archives/689出口合规信息是个历史遗留问题,很久很久之前美国政府不允许采用高强度加密...原创 2020-04-09 09:16:12 · 13162 阅读 · 0 评论 -
iOS13将状态栏文字的颜色设为黑色无效
iOS13,如果开启黑暗模式的话,状态栏的字体就永远是白色的。原创 2020-01-09 10:46:29 · 3345 阅读 · 1 评论 -
iOS13 显示隐藏的导航栏和状态栏时需按特定顺序
从一个正常界面push到新界面,新界面需要隐藏状态栏和导航栏。在iOS13中,从无导航栏和装态栏的界面退回有导航栏和装态栏的界面时,需要先设置状态栏显示,再设置导航栏显示,否则退回有导航栏和装态栏的界面时,导航栏和状态栏显示时重合了。在无导航栏和装态栏的界面:-(void)viewWillAppear:(BOOL)animated{ [self.navigati...原创 2019-12-20 17:33:52 · 2580 阅读 · 0 评论 -
FlutterViewController内存泄露问题
用的Flutter是1.9。发现FlutterViewController的dealloc方法不执行。经查是注册channel的原因,引起FlutterViewController不释放。参考:https://www.jianshu.com/p/1173906e73b2https://github.com/flutter/flutter/issues/26007Flutte...原创 2019-12-17 15:11:25 · 2558 阅读 · 0 评论 -
不要用Xcode11.2打包发布应用
Xcode 11.2有bug,编译的应用会有可能崩溃,所以应该是Apple在后台校验打好的包时,如果是Xcode11.2打的包,会校验不通过。需要用Xcode11.2.1打包发布应用。...原创 2019-11-22 09:58:05 · 1009 阅读 · 0 评论 -
iPhone设备链接Fiddler代理的设置
假设抓包代理的wifi如下:wifi名称:test-wifi路由器:192.168.191.1代理用port:8888,需到代理机器上查1、设置->无线局域网,连接test-wifi。2、在safari浏览器中输入:192.168.191.1:8888。在打开的页面中点击最下面的“FiddlerRoot certificate”,下载证书。3、设置->通用-...原创 2019-10-17 10:11:49 · 2645 阅读 · 0 评论 -
iOS Semaphore信号量的总数代表的是可用资源的数量
信号量的总数代表的是可用资源的数量,不是有多少个线程在使用资源。信号量的总数为0时表示可用资源为0。这时无可用资源给任务,需等待到有资源可用才可以执行任务。示例代码:dispatch_semaphore_t semaphore = dispatch_semaphore_create(5);for (int i = 0; i < 10000; i++) { dispatch...原创 2019-10-16 14:48:13 · 495 阅读 · 0 评论 -
通过压缩png图片的方式减少ipa包的尺寸
1、Targets->Build Settings->Compress PNG Files选项选中后,xcode在打包时, 会同时改变图片的格式,并压缩图片。2、如果Compress PNG Filest == YES,则经压图软件压过的图在xcode处理后,反而会变大。所以要压缩ipa包的大小,需要作两点。1、Compress PNG Filest设为NO。2、全原创 2013-05-22 09:42:17 · 1552 阅读 · 0 评论 -
对__bridge_transfer的理解
__bridge_transfer:释放对象转给(transfer)ARC处理。__bridge_transfer 的主语是CF对象: CF对象 transfer 内存的管理权给ARC。 CF对象未用__bridge_transfer转为NS对象,则这个CF对象需要程序员用CFRelease来手工释放。转换后就转由ARC来自动处理了。不用__bridge_t原创 2013-05-08 11:40:31 · 1000 阅读 · 0 评论 -
Xcode使用dyci实现应用运行时修改代码
在iPhone开发时,用xib的话,源代码管理、日后修改都是问题。所以团队开发时,一般不建议用xib。这就产生一个问题,界面用代码实现后,界面调整时,改完代码后,必须重新运行程序才能看到修该的结果。dyci这个工具可以解决这个问题。 dyci是个动态编译的工具,可以把修改过的代码注入到正在运行的应用中。这样,不需重新运行应用,就可以看到修改的结果了。dyci的网址:原创 2013-06-09 10:38:28 · 3878 阅读 · 0 评论 -
解决MWPhotoBrowser中spinner不停的转不消失的问题
如下修改MWPhoto类的imageLoadingComplete方法,解决UIActivityIndicatorView的转动不消失的问题:- (void)imageLoadingComplete { NSAssert([[NSThread currentThread] isMainThread], @"This method must be called on the m原创 2013-06-20 10:35:34 · 2280 阅读 · 0 评论 -
google的GAN升级到V2后统计失败
google的GAN升级到V2后无法取得统计数据,在stackoverflow上找到了解决办法:http://stackoverflow.com/questions/14904345/google-analytics-not-sending-data-getting-0-active-user?rq=1需要在GAN的admin网站上,将应用的profile由web改为app。原创 2013-06-20 11:28:52 · 1263 阅读 · 0 评论 -
DCIntrospect会影响iOS5.1时摇动功能
如果用[viewController becomeFirstResponder]的方式实现摇动的功能, 则在iOS5.1时,DCIntrospect会影响摇动的功能。推测可能是DCIntrospect把firstResponder给抢了。 但iOS6不影响。原创 2013-06-25 17:22:45 · 1064 阅读 · 0 评论 -
自定义navigationBar的高度
原来看过一些解决办法,都不太好,最近解决自定义 tab bar的高度的问题,从中受到启发,找到下面的解决办法。个人觉得和网上找到的其它方法比还是很简洁的。关键是要调整navBarTransitionView 的frame。调整此view的frame后,view controller的view的frame会随其自动调整高度。float newHeight = 49;s原创 2013-07-17 15:05:10 · 6032 阅读 · 0 评论 -
480屏和568屏使用不同图片的简洁写法
为了适配iPhone5,很多时候要针对iPhone5和非iPhone5用不同的图片。我原来的写法特别罗嗦,如下:UIImage* imgBg =nil;if(IS_IPHONE5){ imgBg = [UIImageimageNamed:@"splash_bg-568h.png"];}else{ imgBg = [UIImage原创 2013-07-18 17:36:40 · 1290 阅读 · 0 评论 -
iOS中让省略号垂直居中
在显示等待框时,一般要求在提示信息后面加个省略号,但中文输入法下输入的省略号是在底部对齐,但中文的习惯是省略号垂直居中对齐,最后找到下面这个方法来显示垂直居中的省略号:中文和英文输入法下一样:option + shift + 9。输出的是一个垂直居中的点,多输入就个这个点就可以模拟垂直居中的省略号了,效果如下:······原创 2013-08-07 15:03:02 · 2491 阅读 · 1 评论 -
不要在viewDidLoad中构建复杂的界面
开发中一个详情界面的内容非常多,在从列表页进入详情界面时,在列表界面停顿很长时间后才进入详情界面。原因就是详情界面的初始化放在了viewDidLoad中,而在此时间内,会一直停在列表界面,用户的使用感受很不好。解决方案:1、在viewDidLoad中显法一个加载界面,2、将界面初始化放在viewDidAppear中。这样,用户就不会在从列表界面进入详情界面时界面时,等很长时间了原创 2013-08-22 09:46:24 · 1390 阅读 · 0 评论 -
越狱的机器上keyWindow有时不正确
在测试时,发现用 [UIApplication sharedApplication].keyWindow 取到的window上addSubview显示不出来。经检查只有越狱的机器有这个问题。可能是越狱后有系统软件劫持了keyWindow吧。换成下面的方式就可以了: [UIApplication sharedApplication].delegate.window。用xCode模认生原创 2013-08-16 06:29:25 · 830 阅读 · 0 评论 -
viewDidAppear中一定要调用[super viewDidAppear]
一定要调用[super viewDidAppear]。在一个继承的UITabBarController中重写了viewDidAppear,但是没有调用[super viewDidAppear]。导致第一个tab中的nav中的vc的viewDidAppear,在第一次调用时,没有被调用。原创 2013-10-21 15:44:54 · 1526 阅读 · 0 评论 -
人脸识别,并生成包含所有人脸的合适UIImage
#import +(UIImage*)betterFaceWithImage:(UIImage*)image showSize:(CGSize)showSize{ //低精度的探测:CIDetectorAccuracyLow已足够用。高精度的耗费时间。 CIDetector* detector = [CIDetector detectorOfType:CIDet原创 2013-10-31 19:45:59 · 941 阅读 · 0 评论 -
iOS7的UITableViewCell的clipsToBounds默认是YES
iOS7的UITableViewCell的clipsToBounds默认是YESiOS6的UITableViewCell的clipsToBounds默认是NO原创 2013-11-15 15:29:08 · 2390 阅读 · 0 评论 -
NSNumber、NSData、NSValue的使用场景
NSNumber:用于int,float等,其有很多便利方法。NSValue:主要用于struct,如CGSize,CGRect。NSData:主要用于自定义对象的持久化。原创 2013-11-16 08:02:32 · 904 阅读 · 0 评论 -
使CBIntrospect支持在设备上使用
UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] init]; [tap setNumberOfTapsRequired:2]; [tap setNumberOfTouchesRequired:1]; [CBIntrospect sharedIntrospector].invokeG原创 2013-12-06 22:13:03 · 849 阅读 · 0 评论 -
比较日期精确到日
+(BOOL)isOver{ //2013年12月31日23:59分后不再显示 NSDate* now = [NSDatedate]; NSDateComponents *dateComponents = [[NSDateComponentsalloc] init];[dateComponent原创 2013-12-05 09:26:12 · 1720 阅读 · 0 评论 -
确保测试代码不会在发布版上运行
有时需要写一些测试代码,但在发行时有可能忘记注释这些测试代码,从而给产品照成重大影响。为确保测试代码不会影响应用的发布,可以如下用宏将测试代码保护起来。#if TARGET_IPHONE_SIMULATOR //测试。使用宏,以确保在发布时,测试代码不会因为忘记注释而在真机上运行。 NSLog(@"此log只在虚拟机时才会打印,在原创 2013-12-13 16:43:34 · 1035 阅读 · 0 评论 -
拨打电话时直接拨分机号
在电话号码的分号前插一个逗号就可以了:如下:UIWebView* callWebView = [[UIWebView alloc] initWithFrame:CGRectZero];//必须作为view的子view[self addSubview:callWebView];NSURL* telURL =[NSURL URLWithString:@"tel:10086原创 2013-12-13 17:10:23 · 7435 阅读 · 0 评论 -
UIView的contentMode中scale和aspect的字面意思
scale的意思是:缩放,在contentMode中出现的话,就是要改变图形的大小了。aspect的意思是纵横的比例,在contentMode中的意思是保持图形的纵横比,保持图片不变形。scale aspect fill:在保持纵横比(aspect)的情况下,缩放图片(scale),使图片充满容器(fill)。scale aspect fit:在保持纵横比(aspect)的情况下,原创 2013-12-18 10:14:21 · 11211 阅读 · 0 评论 -
使UIButton的子view不影响button的点击事件
UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];UIView* subView = [[UIView alloc] init];subView .userInteractionEnabled = NO;[btn addSubview:subView];原创 2013-12-20 10:36:37 · 2900 阅读 · 0 评论 -
iOS7下有时MKMapView中的字特别大的问题的解决
在iOS7下,发现应用中的地图显示时,字特别大,如下。而在iOS6下是正常的。经过分析发现原因如下: 在MKMapView中,设置region后,MKMapView会调用regionThatFits方法,重新计算一个和frame比例匹配的region,重新设置地图的region。 但是在iOS7上,如果frame和设置的region比例相差较大,这个重新计算出的region原创 2013-12-20 17:27:49 · 1423 阅读 · 0 评论 -
xCode5增加第三方framework包有问题
工程从xCode4.6升级到xCode5后,升级第三方的framework都会有问题。好在工程还可以用xCode4.6打开,没次要增加,修改第三方的framework,都只能先用xCode4.6增改framework后,再切回xCode5。不知还有什么更好的办法没有。原创 2013-10-28 14:01:04 · 947 阅读 · 0 评论 -
MAC下SVN客户端Versions和Cornerstone的比较
Versions和Cornerstone这两个工具,个人感觉,就是Versions的功能少一些,但比较简洁。Cornerstone则相反,功能多,但界面较杂乱。这个就看个人喜欢了。Cornerstone有一个功能特别好,就是会把版本修改记录保存到本地。这样虽然在工程第一次checkout时很慢,但好处就是以后在和历史版本比较修改情况时就要快很多了。Cornerstone在AppStore上售价是5原创 2013-12-26 15:29:17 · 3073 阅读 · 1 评论