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好啊

Xcode中Git提交问题

问题描述:今天在做TAG App用Xcode中的Git提交代码,出现如下错误:

The working copy "ViewDeck" failed to commit files.

error: pathspec 'IIWrapController.m' did not match any file(s) known to git.
error: pathspec 'IIWrapController.h' did not match any file(s) known to git.
error: pathspec 'IISideController.m' did not match any file(s) known to git.
error: pathspec 'IIViewDeckController.m' did not match any file(s) known to git.
error: pathspec 'IISideController.h' did not match any file(s) known to git.
error: pathspec 'IIViewDeckController.h' did not match any file(s) known to git.

问题解决:用GitHub进行提交,OK了

Undo “New Group from Selection” project

问题描述:今天在做TAG App 时在Project上不小心“New Group from Selection” 了下。然后无法撤销了。。。Project上就一直顶着一个New Group。

问题解决:

  1. close xcode
  2. right click on your project's .xcodeproj, then click "Show Package Contents"
  3. inside .xcodeproj, remove the project.xcworkspace
  4. save it and re-open your xcode project and it would be rebuild the file

 

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

使用Uncrustify在Xcode中格式化Objective-C代码(转)

Xcode是开发iOS应用和Mac OS应用的必备工具,但这个工具的辅助功能相对于Eclipse之类的IDE来说,还是比较少,在Eclipse里只要按Ctrl+Shift+F,就可以将Java代码格式化得非常好看。而在Xcode里,只有Re-Indent(Ctrl+I)这一个调整缩进的功能,显然不够用。

如果想要完成完备的代码格式化,得要借助Uncrustify这样的工具。更进一步,我们用Automate配置一个针对Text的Service,再加上快捷键,就可以在Xcode里间接实现和Eclipse同样效果的代码格式化功能了。

首先安装Uncrustify工具。安装的方法很多,推荐用Homebrew来安装。如果机器上没有Homebrew,先用这条命令安装:

/usr/bin/ruby -e "$(curl -fksSL http://u.aodaren.com/homebrew)"

安装好Homebrew后,用这条命令安装Uncrustify:

brew install uncrustify

详细的Automate配置步骤可以参考这篇文章,如果不想自己配置,也可以直接下载已经配置好的workflow包,复制到~/Library/Services/,并解压就可以了:

mv Uncrustify-Objective-C.workflow.tar.gz ~/Library/Services/
cd ~/Library/Services/
tar zxvf Uncrustify-Objective-C.workflow.tar.gz

下载针对Objective-C语言的Uncrustify配置文件,移动到 ~/ 目录,并更名为 .uncrustify_obj_c.cfg,注意目标文件名前面有个 .:

mv uncrustify_obj_c.txt ~/.uncrustify_obj_c.cfg

如果上面已经顺利完成,那么现在到Xcode里选中一段代码,点右键,在Services里面应该已经有一个Uncrustify Objective-C服务了。选择后,即可将代码格式化。当然,如果每次都点鼠标显然太麻烦,下面来配置快捷键。

点屏幕左上角的苹果图标,选 System Preferences – Keyboard – Keyboard Shortcuts – Services,在Text分区里,找到刚添加的服务Uncrustify Objective-C,给这个服务加上快捷键。注意不要和Xcode里其它快捷键冲突,推荐设置为:Opt+Cmd+字母O。

这样以后在Xcode里,先用Cmd+A全选代码,再用Opt+Cmd+O来格式化代码。整个效果和Eclipse基本上差不多。

最后,如果对格式有不同的需求,还可以修改cfg文件里的设置,每个选项都有详细的说明,这里就不再赘述了。

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”复选框勾去掉。