iOS设计开发工具

参考:http://ios.devtools.me

 

内容

LittleIpsum随机文字
lorempixel随机图片

设计

iOS FontsiOS支持字体
App Icon TemplatePhotoshop APP icon设计模板
PrepoAPP icon各尺寸生成
Resizer@2x或者-hd图片自动生成低清版本图片
SlicyPhotoshop自动切图(支持png、jpg、+@2x)
ImageOptimImageAlpha减少图片大小
PaintCode适量画图生成代码
Skala PreviewPhotoshop、Illustrator等同步到iPhone、iPad
xScope测量工具九合一

文档

CocoaDocs在线文档
AppleDoc生成文档
Dash查看文档

类库

GitHub类库查询
SourceTreeGit软件
CocoaPods类库管理

测试

chiselLLDB调试命令增强集

TestFlight测试版本发布
CrashlyticsCrash记录工具

Frankk自动化UI测试

其他

Skala Preview原型设计,相当于APP上的Axure RP
iOS Support Matrix各iOS设备、各iOS版本功能矩阵
Parse推送服务,以及数据储存服务
Particle Designer粒子系统
App Annie统计分析工具
Glyph Designer数据接口访问记录
Developer Color PickerXcode颜色拾取器

SimPholders模拟器目录工具

CocoaDeveloper Quicklook Plugin快速查看.ipa和.mobileprovision信息插件

FuzzyAutocompletePluginXcode5自动完成代码插件

正则表达式

ReggyiOS官方正则表达式类库检查工具

Reginald RegEx explorer第三方正则表达式类库RegexKitLite检查工具

Parse与-ObjC冲突

问题描述:今天做TAG的时候,加入Parse并加好相应的frame,还是报如下错误:
Undefined symbols for architecture i386:
"_FBTokenInformationExpirationDateKey", referenced from:
-[PFFacebookTokenCachingStrategy cacheTokenInformation:] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy expirationDate] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy setExpirationDate:] in Parse(PFFacebookTokenCachingStrategy.o)
"_FBTokenInformationTokenKey", referenced from:
-[PFFacebookTokenCachingStrategy accessToken] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy setAccessToken:] in Parse(PFFacebookTokenCachingStrategy.o)
"_FBTokenInformationUserFBIDKey", referenced from:
-[PFFacebookTokenCachingStrategy facebookId] in Parse(PFFacebookTokenCachingStrategy.o)
-[PFFacebookTokenCachingStrategy setFacebookId:] in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_CLASS_$_FBAppCall", referenced from:
objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
"_OBJC_CLASS_$_FBRequest", referenced from:
objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
"_OBJC_CLASS_$_FBSession", referenced from:
objc-class-ref in Parse(PFFacebookAuthenticationProvider.o)
"_OBJC_CLASS_$_FBSessionTokenCachingStrategy", referenced from:
_OBJC_CLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
"_OBJC_METACLASS_$_FBSessionTokenCachingStrategy", referenced from:
_OBJC_METACLASS_$_PFFacebookTokenCachingStrategy in Parse(PFFacebookTokenCachingStrategy.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
问题解决:
方法一:加入FaceBookSDK.framework(>1M)
方法二:设置单独的静态库,使用-force_load /path/libname.a来替换之前的配置-all_load _ObjC
方法三:使用CocoaPods安装Parse

我选择了第三种方法,还是CocoaPods好啊

Base Internationalization需要iOS6以上

问题描述:今天在做TAG Apple 时发现问题。在iOS6-iOS7下,模拟器和真机都运行良好。在iOS5下,模拟器可以运行,但是真机跳出错误,如下:

2013-09-23 10:53:05.199 TAG[2136:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'Main_iPhone' in bundle NSBundle </var/mobile/Applications/B841AA38-1064-4C47-A560-0C1A8FF003AE/TAG.app> (loaded)'

*** First throw call stack:

(0x3743388f 0x35138259 0x3147f5fb 0x312b63ed 0x3113f6eb 0x3113972f 0x31107ac3 0x31107567 0x31106f3b 0x33b4922b 0x37407523 0x374074c5 0x37406313 0x373894a5 0x3738936d 0x3113886b 0x31135cd5 0x8f68d 0x8e130)

terminate called throwing an exception(lldb)

问题分析:首先想到可能是storyboard,查了一下,是支持iOS5+的。然后找到TARGETS-BUILD Phases,发现是所有storyboard都没找到。最后进入文件系统发现在Base.lproj目录下。

问题解决:原因是Base Internationalization需要iOS6+。在GitHub上找到让其支持iOS5的方法:https://github.com/RolandasRazma/RRBaseInternationalization

KeychainItemWrapper出现Couldn’t add/update the Keychain Item错误的解决方法

问题描述:使用 Apple 提供的 KeychainItemWrapper,出现了 Assertion 错误: Couldn't add the Keychain Item 或者 Couldn't update the Keychain Item。

问题分析:出现这一问题一般都是由于在一个文件中调用了两个或者两个以上的 keychain ,所以在 update 时候,会出现 kSecValueData 这个 key 的 value 出现重复,所以在 KeychainItemWrapper.m 中会出现
NSAssert( result == noErr, @"Couldn't update the Keychain Item." );

问题解决:setObject时候写一句:
[self.myKeychain setObject:@"YOUR_APP_INFO" forKey:(__bridge id)kSecAttrService];

iOS Development Enterprise Program申请流程

企业版IDP,即iOS Development Enterprise Program。($299/Year)

Get started with your iOS Developer Enterprise Program:
https://developer.apple.com/programs/ios/enterprise/gettingstarted/

1.申请Apple ID

填写个人资料、开发资料进行注册,最后认证Email。

Apple:
https://developer.apple.com/programs/register/

Apple Developer Registration-Personal

Apple Developer Registration-Professional

Apple Developer Registration-Professional(full)

2.申请邓氏编码

邓氏编码(D-U-N-S® Number,是Data Universal Numbering System的缩写)。它是一个独一无二的9位数字全球编码系统,相当于企业的身份识别码 (就像是个人的身份证),被广泛应用于企业识别、商业信息的组织及整理。这个号码是由邓白氏公司签发的,每个号码会跟一个唯一的企业实体相对应,不会重复使用。也就是说,一个号码代表一个公司实体。

可以到下列网站申请邓氏编码,建议使用Apple申请(免费)。其他需要适当收取一定费用,而且不一定能与苹果兼容。

注意:拿到邓白氏编码不要立即去填,它的生效时间是7-14个工作日。建议一周去填了提交一次。如果一周提交三次都没有通过的话,你的账号会被锁掉。

Apple:
https://developer.apple.com/ios/enroll/dunsLookupForm.action

D-U-N-S Profile Lookup

DUNS Global:
http://www.dunsregistered.com/

邓白氏中国:
http://dnbregistered.com.cn/

3.申请IDP企业版

填写个人资料、公司资料进行注册,然后填入信用卡进行支付,最后等待邮件完成申请。

注意:委托人应该有代表公司签字的授权(公司认可,Apple会在电话里确认)。

Apple:
https://developer.apple.com/programs/ios/enterprise/

Apple Developer Program Enrollment - Enter Legal Contact Information

Apple Developer Program Enrollment - Enter Organization Information

 

PS:所有文档以Apple官网为准。

 

iOS5不支持Auto Layout功能

问题描述

今天做陆家嘴金融杂志iPad版,在iOS6上运行都可以,但是运行在iOS5上报如下错误:

2012-12-24 15:25:29.912 Magazine[321:c07] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint'

*** First throw call stack:

(0x14cc022 0xecccd6 0x1474a48 0x14749b9 0x3504a3 0x35067b 0x350383 0x25016d 0xf61fc 0xf6779 0xf699b 0x55401 0x55670 0x55836 0xe241dd8 0x5c72a 0x2d596 0x2e274 0x3d183 0x3dc38 0x31634 0x13b6ef5 0x14a0195 0x1404ff2 0x14038da 0x1402d84 0x1402c9b 0x2dc65 0x2f626 0x236d 0x2295)

terminate called throwing an exception(lldb)

问题解决

选中.stroyborad和.xib文件,在Inspector属性栏将Interface Builder Document下的“Use Autolayout”复选框勾去掉。

Three20不支持iOS6

问题描述

今天新建的iOS6项目添加Three20类库,报错,如下:

/Three20/src/Three20UI/Sources/UIViewAdditions.m:109:5: Unknown type name '_tapCount'; did you mean 'ItemCount'?

/Three20/src/Three20UI/Sources/UIViewAdditions.m:109:15: Expected identifier or '('

/Three20/src/Three20UI/Sources/UIViewAdditions.m:110:5: Use of undeclared identifier '_locationInWindow'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:111:5: Use of undeclared identifier '_previousLocationInWindow'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:113:43: Use of undeclared identifier '_locationInWindow'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:114:5: Use of undeclared identifier '_view'; did you mean 'view'?

/Three20/src/Three20UI/Sources/UIViewAdditions.m:115:5: Use of undeclared identifier '_window'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:116:5: Use of undeclared identifier '_phase'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:117:5: Use of undeclared identifier '_touchFlags'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:118:5: Use of undeclared identifier '_touchFlags'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:119:5: Use of undeclared identifier '_timestamp'

/Three20/src/Three20UI/Sources/UIViewAdditions.m:127:3: Use of undeclared identifier '_phase'; did you mean 'phase'?

/Three20/src/Three20UI/Sources/UIViewAdditions.m:128:3: Use of undeclared identifier '_timestamp'

问题解决

在UIViewAdditions.m文件中:

#ifdef DEBUG

改为:

#ifdef DEBUG_TOUCHES