iOS
文章平均质量分 63
ArthurChen
iOS码农,iOS程序设计第2版译者,专注移动互联网,专注开发。
展开
-
使用fastlane spaceship 批量自动创建内购素材
使用fastlane spaceship 批量自动创建内购素材背景背景当然是产品同学发过来22个AR内购素材要提交,这个啥感觉做过的人都知道,不想多说了。(此处应有表情包)方案这时候只能选择fastlane spaceship了,spaceship本来是个独立的项目,后来被fastlane收编进来,为pilot,boarding和deliver等工具提供和 iTC 和 ADC 的交...原创 2020-05-02 22:23:45 · 1055 阅读 · 3 评论 -
iphone开发之多线程NSThread和NSInvocationOperation
以下是开发初期收集整理的一点资料 多线程之NSInvocationOperation多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。本次介绍NSOperation的子集,简易方法的NSInvocationOperation:@imp原创 2010-07-25 11:12:00 · 22572 阅读 · 5 评论 -
良好的代码书写格式:适时的代码缩进
刚开始看到这样的代码时候,第一个瞬间是有点将其代码对齐的冲动,好吧,也许是有点强迫症。// start the slide up animation [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; // we need to perform some post原创 2012-02-08 14:49:49 · 2569 阅读 · 2 评论 -
iOS开发:Objective-C精确的货币计算
在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。使用float类型运算,是完全不够的。经过一番测试,最后选择使用系统提供的API的NSDecimalNumber来进行更好的解决。作为一个对外的库,鉴于版本延续,我们保留对外的flaot的类型,不改变接口,选择进行内部适配。以下是一些基本的测试,原始数据float a =原创 2012-01-10 20:49:01 · 4898 阅读 · 2 评论 -
实时游戏对战引擎Photon
个人开发者在iphone平台多数时候只能做单机游戏,因为没有服务器的原因,会出现很多的限制。除了官方的gamecenter有游戏挑战的功能之外,还有一个由exit games推出的实时游戏对战引擎Photon。http://www.exitgames.com/当然是收费的。openfeint在国内也就是九城了,已经获得国内独家代理,或许以后我们也可以用得上。-->九城(Nasd原创 2011-12-12 15:19:37 · 5259 阅读 · 3 评论 -
iOS开发socket程序被SIGPIPE信号Terminate的问题
以前在iphone上写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。 client端通过 pipe 发送信息到server端后,就关闭client端, 这时server端,返回信息给 client 端时就产生Broken pipe 信号了。对于产生信号,我们可以在产生信号前利用方法 signal(int原创 2011-12-07 11:37:26 · 8493 阅读 · 0 评论 -
解决安装多个Xcode出现的PBXProjectWizardChooserWizard问题
以前在安装多个xcode的时候,由于某些配置的问题,在新建工程的时候,会出现类似下面这样的错误,导致工程模板无法创建。卸载xcode后重新安装,还原所有配置也没有解决。而且是只有在选择Window-based Application这个模板的时候才会,其他的模板是不会的,结果很是郁闷。File: /SourceCache/DevToolsIDE/DevToolsIDE-1613/p原创 2011-12-06 16:09:10 · 1705 阅读 · 0 评论 -
iOS已发布应用中对异常信息捕获和处理
iOS已发布应用中对异常信息捕获和处理 iOS开发中我们会遇到程序抛出异常退出的情况,如果是在调试的过程中,异常的信息是一目了然,但是如果是在已经发布的程序中,获取异常的信息有时候是比较困难的。 iOS提供了异常发生的处理API,我们在程序启动的时候可以添加这样的Handler,这样的程序发生异常的时候就可以对这一部分的信息进行必要的处理,适时的反馈给开发者。 不足的原创 2011-12-05 18:01:35 · 13134 阅读 · 6 评论 -
[工具]Mac平台开发几个网络抓包工具(sniffer)
Cocoa Packet Analyzerhttp://www.tastycocoabytes.com/cpa/Cocoa Packet Analyzer is a native Mac OS Ximplementation of a network protocol analyzer and packet sniffer. CPA supportsthe industry-standar原创 2011-11-09 21:23:58 · 63659 阅读 · 0 评论 -
[工具]Mac下非常好用的快捷终端Dterm
DTermA command line anywhere and everywhere这是可在任何目录下直接用全局快捷键直接调出命令输入框的小工具,非常好用作为Mac用户,使用终端是必须的,可是终端telminal却经常会破坏你的工作流程.因为它往往独立于其它软件之外,需要你前往在Terminal对话框内执行命令.所以特别找了DTerm,这是是一款在任一当前目录下即可执行终端命原创 2011-11-08 21:08:45 · 5606 阅读 · 0 评论 -
[技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
Doxygen本来是一个很好的工具,可是我感觉在mac系统下,如果用doxygen最后生成的CHM文件感觉就不是那么恰当,应为本身CHM是微软的产品,苹果系统上并不是很通用,很经常出现文件乱码的情况。这时CHM就比不过PDF和RTF文件。其实直接的html文件也不错。 那在mac平台下没有什么其他的替代方法吗,肯定是有的。特地留意了一下,发现以前真是没有好好的使用xcode强大功能。H原创 2011-11-07 20:28:37 · 8043 阅读 · 1 评论 -
iOS5系统API和5个开源库的JSON解析速度测试
iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件。 我们选择的测试对象包含下面的这几个框架,其中NSJSONSerialization是iOS5系统新增的JSON解析的API,需要iOS5的环境,如果您在更低的版本进行测试,应该屏蔽相应的代码调用。 - [SBJSON (json-framework)](原创 2011-11-24 22:28:10 · 11053 阅读 · 11 评论 -
[开源]在iOS上实现Android风格的控件Toast
iOS的风格和Apple其他产品一样,简单而粗暴。没有给人其他选择的余地,让你又爱又恨。同样的,Apple对待iOS平台的开发人员和对待大众消费者一样,也不给你留余地。UIAlertView就是一个鲜明标志。功能简单,甚至单一,定制性差,消耗资源。在资源紧张的设备上,UIAlertView的动画效果都会稍微卡一下,很是别扭。这时还是很希望在iOS上有一个Android风格的Toast控件。原创 2011-11-03 17:22:21 · 4532 阅读 · 0 评论 -
在SDK中打开其他接入应用的解决方案
在SDK中打开其他接入应用的解决方案一直以来,在iOS的开发中,在程序中打开另外一个应用是不允许。后来有正义之士用class-dump在私有API中找到了这样的功能。那就是使用UIApplication的launchApplicationWithIdentifier:suspended:来打开。使用的办法如下: NSString *identifier = [[NS原创 2011-10-31 10:58:45 · 9214 阅读 · 0 评论 -
(译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)
更新:ios4.1现在已经将这个做到SDK了。你可以设置键盘类型为UIKeyboardTypeDecimalPad!完成!在开发iphone程序的时候你可以选择各种键盘。其中的数字面板却没有带小数点。在底部的左下角有一个空白按钮,什么作用都没有。所以我将向你展示怎么将一个小数点按钮放在那里,看起来像这样的:有一些其他的教程向你展示如何做到这样,但是我相信我的更好。因为代码简翻译 2011-11-17 16:14:04 · 4451 阅读 · 0 评论 -
Mac OS X工具:版本控制SVN
版本管理工具是开发过程中非常重要的工具。在iphone开发中,mac平台主要有以下几种常用的工具。这里只是简单介绍,就不在到处拷贝介绍过来凑字数了。Xcode自带的SCM,配置简单,但是个人用着不适应。 SVNX,开源免费的工具,界面简单,但不是很好用,和wind原创 2011-08-25 21:46:55 · 5422 阅读 · 2 评论 -
应用程序委托和新的单例(译)
应用程序委托和新的单例(译)点击这里查看原文这是一个全局变量:Wizard *gWizard;我将会把这称作零阶全局,前提是我不需要和任何对象(包括类)交互来访问这个对象。下面,我们来看看一个单例[Wizard sharedWizard]; //希望他不忙翻译 2011-09-21 13:04:38 · 1296 阅读 · 0 评论 -
探测调试器
我怎么确定是不是运行在调试器下呢? 下面的代码展示最佳的判断方式#include#include#include#include#include static bool AmIBeingDebugged(void)// Returns true if the current process is being debugged (eit原创 2012-02-27 18:46:39 · 2443 阅读 · 0 评论 -
区分BundleVersion和BundleShortVersionString
区分BundleVersion和BundleShortVersionString 最近遇到了关于检查更新的版本问题了。问题出在了Info.Plist配置中的两个字段,BundleVersion和BundleShortVersionString。搞了两年的开发,第一次看到还有另一个字段的版本。由于版本检测升级的问题,搞得一众人手忙脚乱,一直讨论都没有一个定论。 迅速goo原创 2012-03-02 13:29:56 · 8630 阅读 · 4 评论 -
如何防止文件被备份到iCloud 和iTunes?
应用有一些文件需要永久的存储在本地使应用支持离线功能。但是这些文件并不包含用户数据,无需备份。如何防止这些文件被备份。在iOS上,应用负责确保只有用户数据而不包含应用数据被备份到iCloud和iTunes上。具体的步骤在不同的iOS 版本各有不同。所以对不同的版本进行区分描述。关于具体哪些数据不应该被备份,参见App Backup Best Practices section of the原创 2013-01-24 17:05:44 · 5826 阅读 · 0 评论 -
从iPhone应用中启动App Store
如何从我自己的应用中启动App Store?同时如何链接到商店中我自己的应用?-[UIApplication openURL:] 可以处理传入的链接到应用和媒体NSURL 对象,启动对应的商店应用。根据以下步骤获取链接,可以是应用,歌曲,itunes中的专辑,同时链接它到你的iPhone应用。在电脑中启动iTunes搜索你要添加的项目右击或者control点原创 2012-12-28 15:56:22 · 3894 阅读 · 0 评论 -
为什么在Zombies调试时代码表现不一致?
在一些操作系统中,开启Zombies调试功能会对ARC代码的行为有一些副作用。包括iOS和OS X应用都会受影响。这在iOS 6或更新以及在OS X 10.8或更新中已经被修复。在iOS 6 / OS X 10.8之前, 使用 the Zombies instrument 或 NSZombieEnabled ,或者 "Enable Zombie Objects" Xcode d原创 2012-12-28 15:55:08 · 1904 阅读 · 0 评论 -
改善Objective-C的日志输出
我该如何在日志输出信息中添加上下文信息,例如当前方法或者行号? C预处理器提供了一些标准宏,可以提供当前文件,行号,或者函数的信息。另外,Objective-C有_cmd隐式参数,可以提供当前函数的选择器,以及将选择器和类转换为字符串的功能。你可以在调试或者错误处理时在NSLog语句中提供这些上下文信息。 下面是打印当前方法和行号的例子。NSMutableArray *so原创 2012-12-23 17:49:33 · 3439 阅读 · 0 评论 -
为何在设备上运行时无法保存数据到应用bundle中
应用保存数据倒应用bundle中,这在模拟器中是可以的,但是在设备真机中是不行的。设备和模拟器之间的不同导致其出现不同的行为。在模拟器中,应用是保存在本地中的,你有完全的读写权限,所以代码是可以读写bundle中的设置数据。但是,在设备中,应用bundle是无法修改的。File System Programming Guide 有对应用目录中可写位置进行了说明。应用的home目原创 2012-12-23 17:48:42 · 2015 阅读 · 0 评论 -
NSSetUncaughtExceptionHandler在iOS 5.0 模拟器上未被调用
最近在不同版本的SDK和设备中适配收集崩溃信息,发现在前面的《iOS已发布应用中对异常信息捕获和处理 》(http://arthurchen.blog.51cto.com/2483760/734175)中提到的NSSetUncaughtExceptionHandler在Xcode4.2&iOS 5.0 SDK的环境下稍有不同。在模拟器中发现崩溃的时候并没有log异常的内容和相关信息,同原创 2012-11-15 19:37:24 · 2467 阅读 · 0 评论 -
使用GCD的dispatch_once创建单例
之前一篇《Objective-C的单例模式(singleton)》http://arthurchen.blog.51cto.com/2483760/642536介绍了创建单例的方式,不过后来发现其实在ios 4.0后有更加简单的方式。就是使用GCD的功能代码如下:+ (instantClass *)sharedClient {static instantClass *_sh原创 2012-11-15 19:38:27 · 4970 阅读 · 0 评论 -
如何查看经过iOS优化的PNG图片
编译iOS应用是,xcode会对PNG文件进行优化,这样图片预览就无法显示。那么如何查看这些经过优化的文件呢?优化的动作是由pngcrush 工具完成的,你可以再xcode中找到。pngcrush 支持命令行选项-revert-iphone-optimizations。这个选项可以支持撤销在xcode编译过程中进行的优化。所以,想要查看经过优化的文件,你应该先撤销优化,然后使用图片预览打开原创 2012-11-15 19:37:59 · 4438 阅读 · 0 评论 -
如何在存在动态版本的库时使用静态版本的库
当系统存在动态版本的库时,如何直接链接静态版本的库 通常,连接器会遍历目录去寻找动态版本的库如果没找到,在每一个目录下查找静态版本的相同的库。 显示的判断使用哪一个版本的库时通过设置查找路径。在命令行中使用-L连接选项,随后时查找的目录路径。在xcode中的设置是使用Library Search Paths 来设置查找目录 在编译的过程中,通过在xcode中的other l原创 2012-02-27 18:47:45 · 1815 阅读 · 0 评论 -
如何在程序内退出iPhone程序
如何在程序内退出iPhone程序 iPhone上退出应用程序只能由用户点击Home键,apple并没有提供退出的api,私有的api是有的,不过听说4.0也已经无效了。基本我们已经不用这种暴力的事情了。苹果就是这样的霸道。 不过呢。领导们,总是有那么一些奇奇怪怪的需求,希望程序员可以让程序退出。程序员呢,总是可以解决,那么我们的方式就是调用exit(0)了。不过这时退出程序原创 2012-03-02 19:22:18 · 3877 阅读 · 2 评论 -
如何在发布包中将资源放在独立目录中
如何在发布包中将资源放在独立目录中 在添加资源时,首先资源应该在独立的目录中,然后在添加资源的时候修改一下默认的选择项,就可以。添加后资源目录会变成不同于平常的黄色文件夹,而是蓝色文件夹。 添加方式如下。参考:https://developer.apple.com/devcenter/ios/index.action原创 2012-02-27 18:47:16 · 1673 阅读 · 0 评论 -
在iOS程序中检测数字和链接
在程序中检测数字和链接在iPhone 3.0后就支持UIDataDetectorTypes来检测数字和链接。UIDataDetectorTypePhoneNumberUIDataDetectorTypeLinkUIDataDetectorTypeNoneUIDataDetectorTypeAll通过设置dataDetectorTypes属性就可以实现功能- (void)原创 2012-03-09 12:58:38 · 3869 阅读 · 0 评论 -
在iOS设备上保存用户数据
在设备上保存用户数据应用程序在保存数据到程序的Bundle,这在模拟器上是可以的,但是在真机上就不行了。这是因为设备和模拟器的不同的权限导致的。模拟器拥有完全的读写权限,设备就没有了。iPhone Application Programming Guide 中包含了相关的描述。程序的目录下有一个偏好设置的目录/Library/Preferences但是你不能直接创建文件,应该使原创 2012-03-09 13:00:38 · 3039 阅读 · 0 评论 -
为什么应用程序用户启动时崩溃,使用xcode打开却不会
为什么应用程序用户启动时崩溃,使用xcode打开却不会 iPhone的系统在程序启动时使用一个看门狗定时器,一旦发现程序花费太长的时间用来初始化启动程序,系统会终结程序。程序被终结的异常代码为0x8badf00d,输出崩溃报告。 Exception Type: 00000020Exception Codes: 0x8badf00dHighlighted Thread: 0原创 2012-03-09 13:01:22 · 5484 阅读 · 4 评论 -
ios开发两个简单的错误提示和原因
两个简单的错误提示和原因在使用iTunes Connect上传时出现Info.plist does not contain a CFBundleResourceSpecification这样的错误时通常是因为你上传的是模拟器的版本的程序。建议在上传前还是经过真机测试的比较好。 在Xcode的 Organizer中出现"Xcode cannot find the software i原创 2012-03-09 13:01:56 · 3999 阅读 · 0 评论 -
ios开发使用UIWebView显示多种文档
使用UIWebView显示多种文档 除了HTML的内容,UIWebView还可以显示多种类型的文档包括以下的类型· Excel (.xls)· Keynote (.key.zip)· Numbers (.numbers.zip)· Pages (.pages.zip)· PDF (.pdf)·原创 2012-03-09 13:03:07 · 6432 阅读 · 0 评论 -
PSA: 从数组移除对象
PSA: Removing objects from arrays你创建一个NSMutableArray. 两次添加相同一个对象到数组中 向数组发送removeObjectIdenticalTo: 消息, 传入你所添加的对象 数组的count是多少?如果你说1,翻译 2011-08-25 22:40:00 · 3371 阅读 · 0 评论 -
iPhone: 对象沿路径动画
这里我将展示如何在UIView上让对象沿着路径动画,我将创建路径并画到UIView上让你能都看见,并沿相同的路径来做动画。我在添加到屏幕的UIView完成所有的这些… 首先,我们在屏幕上画一条曲线 //This draws a quadratic bezier c翻译 2011-08-17 23:04:41 · 5650 阅读 · 0 评论 -
iphone开发之获取是否飞行模式和设备IMEI
在iphone的开发环境下,有时候需要获取的设备信息的时候是比较困难,没有和android一样的源码开放,但是通过其他的很多途径,我们可以获取到许多意想不到的信息。NetworkController 是一个私有的类,其中有许多很有意思的功能。可以判断网络,网卡,飞行模式,EDGE等等的许多网络相关的功能。/* * Generated by class-dump 3.1.1. * * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-原创 2011-04-21 20:11:00 · 6840 阅读 · 1 评论 -
iphone开发之C++和Objective-C混编
C++和Objective-C混编(官方文档翻译)原文网址:http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.htmlUsing C++ With Objective-C 苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++。有了它,你就可以在Obje转载 2011-04-21 20:45:00 · 5213 阅读 · 0 评论 -
iphone开发之私有库private frameworks
https://github.com/kennytm/iphone-private-frameworks Headers for private frameworks or undocumented interfaces of iPhoneOS 3.x or before (4.x is not supported yet).class dump出来的头文件,包含apple没有开放的json库,SpringBoard,UIKit,NSObject和UIView等相关的许多强大的功能,两千多个头文件包含了无原创 2011-04-21 19:55:00 · 6434 阅读 · 0 评论