当苹果因为UIDevice、udid、uniqueIdentifier而把我们的应用拒之门外invalid binary的时候,呕心沥血解决方法啊
本文转载至 http://blog.csdn.net/macmini/article/details/16341669
当我们辛辛苦苦把应用或者游戏做好的时候,满怀激动地把应用提交上去给苹果大大,谁知道的事,苹果大大不吃我们这一套,直接上传失败,而且还会发一封邮件过来,大致意思就是UIDevice、udid、uniqueIdentifier,心里那个桑心哪,真想拿吧竹刀去剁了他们。。。
好吧,言归正传,其实为什么会这样子呢,主要是2013-5-1起,苹果审核将使用udid的应用不可提交。这由此我们需要把我们应用使用udid的实行删除并修改の。可是,有时候呢,是吧,人呢,比较健忘或者其他的,忘记了在哪里引用了这些东西。所以我们要一一把他们解决。那就先从解决了通过验证这块先把,然后再说说替换方法;
一:先从最简单的开始起:试着在自己的工程里搜索一下uniqueIdentifier,如果有的话进行修改;最后将udid这个参数也改掉,改成什么UUID啥的,可以通过验证,保险点,这里属于个人愚见;
二:上述改完之后进行发布,如果还不行就说明不是自己代码中的问题了,那既然代码中没问题,还有哪些地方会引用呢,这里其实应用也有人会想到了,就是我们经常会引用的第三方库,如果你用的以前版本的第三方库的话有可能他之前有过这行获取代码,这样子也是通过不了的,所以我们要查找出来并更新该库,但因为我们可能会引用许多库,所以不可能进行一一替换,这样子费时费力。因此:
1、打开终端,进入到自己的工程文件夹当中
例子:
*给完全没用过终端命令的新手恶补一下
ls
列出文件 参数 目录名
eg:查看当前目录下有什么
cd
转换目录
eg:进入文稿目录
cd Documents
2、 输入 find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier
find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier 这行命令将为我们找到第三方库当中所引用了 uniqueIdentifier的类库,找到后一一替换或删除即可,然后打包上传
3、如果以上方法还不行的话可以再用一下方法,这也是我找到了好几天,逛了好久的国外网站看到的,可能不是最先发现的,但也写出来给大家借鉴一下:
Xcode-->Debug-->Breakpoints--->Create Symbolic Breakpoint然后在Symbolic breakpoint中的symbol栏输入-[UIDevice uniqueIdentifier],然后在虚拟机上运行程序,当我们的应用调用到这个方法的时候将会断点至那里,将那里修改就可以了,一一排除后打包应用上传,一般来说经过三种方法排除和修改后,应用能够通过验证并上传的了。如果不行的话就要看一下其他同行是怎么做的。
替换udid方法:
这里提供两种思路,
1、使用device_token替代udid,具体方法可Google
2、使用设备的物理地址并用MD5转换成32位数,以替代udid,具体算法如下
***.h文件
- #import <Foundation/Foundation.h>
- #import <UIKit/UIKit.h>
- @interface UIDevice(Add)
- - (NSString *)uniqueDeviceIdentifier;
- @end
***.m文件
- #import "***.h"
- #import "NSString+md5.h"
- #include <sys/socket.h> // Per msqr
- #include <sys/sysctl.h>
- #include <net/if.h>
- #include <net/if_dl.h>
- @interface UIDevice(Private)
- /*私有:获取设备mac地址*/
- - (NSString *)macaddress;
- @end
- @implementation UIDevice (Add)
- #pragma mark -
- #pragma mark Private Methods
- // Return the local MAC addy
- // Courtesy of FreeBSD hackers email list
- // Accidentally munged during previous update. Fixed thanks to erica sadun & mlamb.
- - (NSString *)macaddress
- {
- int mib[6];
- size_t len;
- char *buf;
- unsigned char *ptr;
- struct if_msghdr *ifm;
- struct sockaddr_dl *sdl;
- mib[0] = CTL_NET;
- mib[1] = AF_ROUTE;
- mib[2] = 0;
- mib[3] = AF_LINK;
- mib[4] = NET_RT_IFLIST;
- if ((mib[5] = if_nametoindex("en0")) == 0) {
- printf("Error: if_nametoindex error\n");
- return NULL;
- }
- if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
- printf("Error: sysctl, take 1\n");
- return NULL;
- }
- if ((buf = malloc(len)) == NULL) {
- printf("Could not allocate memory. error!\n");
- return NULL;
- }
- if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
- printf("Error: sysctl, take 2");
- free(buf);
- return NULL;
- }
- ifm = (struct if_msghdr *)buf;
- sdl = (struct sockaddr_dl *)(ifm + 1);
- ptr = (unsigned charchar *)LLADDR(sdl);
- NSString *outstring = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
- *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
- free(buf);
- return outstring;
- }
- - (NSString *)uniqueDeviceIdentifier
- {
- NSString *macaddress = [self macaddress];
- return [macaddress md5];
- }
- @end
调用方法
- NSString *uuid = nil;
- uuid = [[UIDevice currentDevice] uniqueDeviceIdentifier];
当苹果因为UIDevice、udid、uniqueIdentifier而把我们的应用拒之门外invalid binary的时候,呕心沥血解决方法啊的更多相关文章
- 苹果审核之遇到IPV6问题被拒的解决方法
情景: 等待苹果审核上线时,发现因为IPV6被拒了.这是悲剧,以下是苹果审核给我的理由: We discovered one or more bugs on Wi-Fi connected to an ...
- Mac电脑没声音了怎么办?苹果电脑没声音的解决方法
在使用Mac电脑的过程中,偶尔会出现电脑没声音?发出奇怪的声音?连接外部音频设备出问题等音频故障,遇到这种情况该怎么办呢?小编有妙招! 检查音量 首先检查Mac是否被静音,按住F12快捷键或滑动菜单栏 ...
- (转)苹果iOS开发者账号过期临时解决方法
苹果iOS开发者账号过期临时解决办法 苹果iOS开发者账号一年的费用是99美金,作者最近由于各种原因,导致renew没能在账号过期之前支付好,所以在账号过期等待renew的期间,试了试一些非正常手段, ...
- 苹果cms开启防红跳转后,提示模板文件不存在解决方法
1,苹果cms开启防红跳转后,提示模板文件不存在(如下图)这是因为你使用的模板里面缺少苹果cms自带的防红跳转模板导致,遇到这种状况后需要把苹果cms默认自带的( template/default_p ...
- 苹果maccms网站漏洞进行修复解决方法教程
上期发现视频名称中包含木马文件 然后教大家使用标签进行过滤 {$vo.vod_name|mac_filter_html} 可是最近发现现在黑客行为是全字段挂马,修改数据字段格式挂马,多重嵌套挂马. 真 ...
- xcode打包苹果应用遇到的问题及解决方法
1.手机升级到iOS 10之后,运行真机出现了Development cannot be enabled while your device is locked. 原因分析: 这里是你对这台电脑设置了 ...
- 关于苹果iPhone手机对页面margin属性无效的解决方法一(如有错误,请留言批评)
这个问题,是在给商城网站底部footer设置margin属性的时候发现的,先把出现问题的截图发出来看一下 安卓手机,打开正常 iphone6 p 打开出现的问题(无视margin-bottom:6 ...
- vue项目使用html5+ barcode扫码在苹果遇到的问题以及自己的解决方法
之前在记录扫码 在安卓时,会出现黑屏,错位,闪退等等问题.解决方法在另一篇文章里 https://www.cnblogs.com/huzhuhua/p/11064764.html . 当时以为 是 ...
- 在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?
Sql2005中,提供了uniqueidentifier 数据类型.说白了,就是个GUID,这种类型开发时倒是很有必要的. 今天程序中遇到了这个问题:表里定义了一个uniqueidentifier 列 ...
随机推荐
- bcdedit
我的电脑装了双系统:Win2003 SP2(C盘)和Win2008 SP2(D盘),最近2003一启动就蓝屏unknown hard error,安全模式也进不去,恢复注册表等方法试过也不行,但200 ...
- chrome 浏览器插件开发
一.chrome 浏览器插件开发是什么: 1 从技术上说插件只是一个存在于本地的一个网站.所以呢在插件开发的过程中用到的技术无非是 javascript .html .css . 二.把当前活动页面的 ...
- 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM 各公共网关接口介绍
CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...
- Javascript中window.opener的一点小总结
以前一直认为window.opener只有在window.open方法打开下的窗口才可以访问,没想到即使是a链接打开的页面的照样可以访问.window.opener指向父窗口,也就是来源窗口.可以利用 ...
- 宏里面的(void)0
在<c标准库>实现assert.h中有一个语句: #define assert(test) ((test)?(void)0 : _Assert(__FILE__":"_ ...
- Atitit.网页爬虫的架构总结
Atitit.网页爬虫的架构总结 1. 总数的结构..(接口方法) 1 2. 获得页数 1 3. 跳页处理(接口方法) 2 4. 单个的页面处理(接口方法) 2 4.1. 获得页面url 3 4.2. ...
- [elk]Mutate filter plugin增删改查字段
Mutate filter plugin参考: https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html ...
- JAX-WS使用Handler实现简单的WebService权限验证
WebService如果涉及到安全保密或者使用权限的时候,WS-Security通常是最优选择.WS-Security (Web服务安全) 包含了关于如何在WebService消息上保证完整性和机密性 ...
- [Spring Framework]学习笔记--@Component等stereotype的基础
在继续讲解Spring MVC之前,需要说一下常用的几个用来标记stereotype的annotation. @Component,@Controller,@Repository,@Service. ...
- spark源代码
电子书: https://spark-internals.books.yourtion.com/