IOS跳转Appstore评分

把id换成你自己的id即可(itunesconnect里可以查看)

ios下获取系统版本号

通常我们会通过

来返回系统的版本号,但是使用浮点数的时候,我们会发现实际返回的浮点存在精度问题

例如7.1.1 的系统 可能返回7.0899999999999

为此,我们可以进行改进

IOS下获取UUID

ios5.0

通过UIDevice 的uniqueIdentifier方法,但很可惜苹果后来废弃了这一方法,并且如果你到应用里使用这样的方法提交到appstore会被拒绝。

ios6.0

鉴于uniqueIdentifier被废弃后,有些人想到了用WiFi的mac地址来取得唯一id,然而同样悲剧的是,在ios7.0后,这个方法同样失效了,全部返回为:02:00:00:00:00:00

ios7.0

难道就没有方法了吗?天无绝人之路,一种KeyChain的方法逐渐被大家提出和使用。

在此之前,我们先看看2个概念idfv和idfa

idfa

全名:advertisingIdentifier
代码:

来源:iOS6.0及以后
说明:直译就是广告id, 在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置|隐私|广告追踪 里重置此id的值,或限制此id的使用,故此id有可能会取不到值,但好在Apple默认是允许追踪的,而且一般用户都不知道有这么个设置,所以基本上用来监测推广效果,是戳戳有余了。
注意:由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别用户。

idfv

全名:identifierForVendor
代码:

来源:iOS6.0及以后
说明:顾名思义,是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的DNS反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于com.somecompany.appone,com.somecompany.apptwo 这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。
注意:如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。

根据解释,我们可以看出idfa貌似更能适合我们的场景,但是这里有个问题就是一旦app删除或重新安装的时候,这个值会发生变化,那么怎么解决这个问题呢。我们可以将生成的这个唯一id存入到钥匙串里,但重新安装的时候,先读取钥匙串即可。怎么实现呢?

我们需要借助KeyChain,苹果封装了一个例子,我们可以直接使用。具体下载戳这里

这里会看到我们使用了keychain access group,我们需要在xcode进行配置

在ios工程的同目录,新建一个KeychainAccessGroups.plist文件,该文件的结构中最顶层的节点必须是一个名为 “keychain-access-groups”的Array,并且该Array中每一项都是一个描述分组的NSString。对于String的格式 也有相应要求,格式为:”AppIdentifier.com.***”,其中APPIdentifier就是你的签名中最前面的那部分。

然后,我们需要build-settings的Code Signing Entitlements选项里指定这个文件

然而,当我们在模拟器下调试成功,但是真机上却报错了:

Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Couldn’t add the Keychain Item.’

后来在stackoverflow上找到答案:

http://stackoverflow.com/questions/4891562/ios-keychain-services-only-specific-values-allowed-for-ksecattrgeneric-key

KeyChain内部以kSecAttrAccount 与kSecAttrService作为唯一钥匙串标识,所以修改代码以kSecAttrService作为唯一存储标识即可。

Github上也要一些封装得更加成熟得类库,推荐大家使用

https://github.com/fabiocaccamo/FCUUID

https://github.com/smileEvday/SvUDID

 

UITableView的didSelectRowAtIndexPath方法点击失效

出现这种情况,一个可能的原因是在你的视图写的UITapGestureRecognizer方法截获了tuoch事件,导致点击实效。

具体解决方法,重写UIGestureRecognizerDelegate中

– (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。

代码如下:

NSUserDefaults中使用NSArray的问题

例如实际开发中,我们经常会将本地的账号列表存入到NSUserDefaults中去,然后判断是否当前账户加入其中,如果没有则加入。

于是我开始使用的时候,使用下面的代码

但是实际运行的时候会发现出现崩溃:

2015-10-30 10:29:31.120 TuomiSDKDemo[33801:3464708] *** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object’

根据提示,感觉即时显视声明了userList的为NSMutableArray类型,但实际获取值可能还是NSArray

所以,写的更为准确点儿吧:

UITableView顶部显示空白

UIScrollView(包括其子类,比如UITableView)会自动在顶部和底部预留一些空白(因为滚动经过半透明导航条或者tabbar下面,需要能隐约看到的效果)

,是否预留空白可以由UIViewController的automaticallyAdjustsScrollViewInsets的这个属性控制(默认YES,表示预留空白)。所以如果要消除空白 只要在viewdidload方法中设置

即可

check app is installed on ios device

we can use ios provate api,but your app may be refused by appstore.

= ios6.0

 

Cocos2d-x在Android和IOS中设置横竖屏

一、横屏、竖屏设置

1、android

AndroidManifest.xml文件中,

screenOrientation=”landscape” 为横屏,

screenOrientation=”portrait”为竖屏

2、iOS