2018-01-29 16:29:24 zanjiaowei 阅读数 51032

最近有人提出问题,说IOS7怎么在APP store中下载软件,好多软件都提示需要ios8及以上才可以下载,而App Store里下载又不会提供给你旧版本,难倒ios7就必须升级才能下载吗?对此本人在网上查了好多资料也做了好多测试,大多数说的都是升级系统(这纯属废话,要是升级系统还用问你啊),终于皇天不负有心人,经过多次测试,我找到了一个解决办法,其实真的是非常简单,废话也不多说了,方法就是,把你的AppleId的用户名及密码让你的亲朋好友用他的苹果手机或者iPad登录(当然他的设备必须是高版本的)后先下载到他的设备上,这样你的AppleId就会记录下你的购买记录,接下来你就可以拿自己的低版本设备,用下载过该应用的AppleId登录,然后进入App Store 点击  最后一个栏目“更新”,在那里会显示当前AppleId下载过的应用,然后你点击你要下载的那个就可以了,当然也回提示当前应用版本需要IOS8及以上之类的,但是下面还有说   是否获取旧版本,这样就可以下载你当前设备可以下载的版本了。

结束语:看完小编的文章是不是觉的很啰嗦啊,这么简单的事非要说这么麻烦,小编在这里表示也很无奈啊,文笔不行,又怕大家不理解,所以只能多啰嗦了,另外方法是不是很简单?如果解决了您的问题,麻烦给点个赞哦,谢谢!


2016-05-05 11:38:52 csdn2314 阅读数 511


iOS APP版本检查更新:

下面的都是废话,是不能通过苹果审核的,APP更新现在直接发


布新版本就好,苹果内部会帮我们搞好。比如你之前发布了1.0版


本,现在想发布1.1版本或者更高的,你就直接在苹果开发者中


心:http://developer.apple.com 上传新版本就好。


iOS8之后用户可以设置连接WiFi后有新版本APP可以自动更新,


也可以手动在iPhone上打开APP Store 来更新,千万不能像下面


那样提醒用户有新版本可更新,那样几乎是不能通过苹果审核


的。




iOS8.0之后,苹果规定APP内不能出现“当前版本”之类的字样,以为iOS8.0之后用户可以设置在连接WiFi的情况下自动更新APP,但有些用户可能并不想更新APP,所以要在APP内提醒用户。


检查更新的步骤:


1.可以写个方法来获取APP Store上APP的版本号: (记得要遵循代理

NSURLConnectionDelegate

#pragma mark - 是否有新版本

- (void)isNewVersion{

    //判断 APP version, id 是自己 app 上架时的 Apple id

    NSString *urlStr =@"https://itunes.apple.com/lookup?id=1234567890";

    NSURL *url = [NSURLURLWithString:urlStr];

    NSURLRequest *request = [NSURLRequestrequestWithURL:url];

    [NSURLConnectionconnectionWithRequest:requestdelegate:self];

}


2.在回调方法中进行判断

- (void)connection:(NSURLConnection *)connection didReceiveData:(nonnullNSData *)data{

    NSError *error;

    //序列化

    id jsonObject = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragmentserror:&error];

    NSDictionary *appInfo = (NSDictionary *)jsonObject;

    MCLog(@"%@",appInfo);

    

    NSArray *infoContent = [appInfoobjectForKey:@"results"];

    NSString *appVersion = [[infoContentobjectAtIndex:0]objectForKey:@"version"];

    MCLog(@"APP version is %@",appVersion);

  

//地址

    NSString *trackViewUrlStr = [[infoContentobjectAtIndex:0]objectForKey:@"trackViewUrl"];

    //当前版本

    NSString *currentVersion = [NSBundlemainBundle].infoDictionary[@"CFBundleShortVersionString"];

    MCLog(@"current version is %@",currentVersion);


    if (![appVersionisEqualToString:currentVersion]) {

        UIAlertController *alertController = [UIAlertControlleralertControllerWithTitle:@"检查更新"message:[NSStringstringWithFormat:@"发现新版本(%@),是否升级?",appVersion]preferredStyle:UIAlertControllerStyleAlert];

        

        UIAlertAction *cancalAction = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *_Nonnull action) {

            

        }];

        

        UIAlertAction *confirmAction = [UIAlertActionactionWithTitle:@"升级"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *_Nonnull action) {

            //点击升级,跳到APP store进行更新

            [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:trackViewUrlStr]];

        }];

        

        [alertController addAction:cancalAction];

        [alertController addAction:confirmAction];

        

        [self.window.rootViewControllerpresentViewController:alertControlleranimated:YEScompletion:nil];

    }

}





2014-12-04 15:45:55 aijiami0 阅读数 1715

        【iOS app加密】iOS app之游戏加密防破解。iOS app游戏类应用有一个很泛滥但被视为鸡肋的问题,那就是iOS app被破解的问题。因为国内大多数游戏靠内购和广告盈利,游戏安装包也只是在早期象征性的收费,之后就会免费,所以很多开发者对iOS app游戏从只能在购买者设备安装变成可免费到处安装并不关注。

         App游戏被破解攻击可能是宿命,正所谓,哪里有游戏,哪里就有黑客,哪里就有破解。iOS app游戏没有加密而被破解的问题,其实不仅仅是iOS上,几乎所有平台上,无论是pc还是移动终端,都是顽疾。可能在中国这块神奇的国度,大家都习惯用盗版了,并不觉得这是个问题,iOS app游戏开发者被破解也是麻木了。甚至某些盈利性质的公司也这么想,并且还有些平台网站把盗版软件当成噱头,义正言辞地去宣传用盗版是白富美,买正版是傻X。其实iOS app没有加密被破解的问题,并不起源于中国。所以,广大iOS app游戏开发者还是需要了解如何保护iOS app加密防破解的技术。下面就来研究下iOS app之游戏加密防破解。

         1、事后检测

        在iOS app加密防破解方面,可以做事后检测,使得破解IPA无法正常运行以达到防御作用。

        而该如何做事后检测呢,最直接的检测方法是将破解前后文件系统的变化作为特征值来检测。通过分析PoedCrackMod源码,会发现根据破解前后文件时间戳的变化,或文件内容的变化为特征来判断是不可靠的,因为这些特征都可以伪造。

         2、函数名加密

         iOS app加密防破解,为0便是破解版。当检测出破解版本时注意,为了避免逆向去除检测函数,需要多处做检测。同时检测函数要做加密处理,例如iOS app函数名加密,并要在多处进行检测。

         iOS app破解所用的工具和方法都必须运行在越狱机上,因此将安全问题托付给苹果,幻想他可以将iOS系统做得无法越狱,他提供的一切安全措施都能生效(例如安全沙箱,代码签名,加密,ASLR,non executable memory,stack smashing protection)。这是不可能的,漏洞挖掘大牛门也不吃吃素的,所以自己的iOS app还是由自己来加密守护。

        具体方法如下

        1.URL编码加密

        对iOS app中出现的URL进行编码加密,防止URL被静态分析

        2.本地数据加密

        对NSUserDefaults,sqlite存储文件数据加密,保护iOS app的帐号和关键信息。

        3.网络传输数据加密

        对iOS app客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取

        4.方法体,方法名高级混淆

        对iOS app的方法名和方法体进行混淆,保证源码被逆向后无法解析代码

        5.程序结构混排加密

        对iOS app逻辑结构进行打乱混排,保证源码可读性降到最低

       目前有这一iOS app加密保护技术的是移动应用安全保护第三方平台爱加密。

 

2018-01-18 12:02:52 huayu_huayu 阅读数 9151

需要用到终端命令行来操作

1.查找模拟器

instruments -s
    输出(只贴出ipad和iphone的):

iPad (5th generation) (11.2) [520E435E-640D-486D-861A-DC78EF09CF27] (Simulator)
iPad Air (11.2) [6A009D9C-4855-4978-B59F-0C31F8C84931] (Simulator)
iPad Air 2 (11.2) [D3A5A401-1126-4666-AE3C-A0B00871CCF9] (Simulator)
iPad Pro (10.5-inch) (11.2) [E5FA9EF6-795F-4759-876E-94708C427548] (Simulator)
iPad Pro (12.9-inch) (11.2) [D5FA5FEF-286B-406B-AE6F-79E0081E4F64] (Simulator)
iPad Pro (12.9-inch) (2nd generation) (11.2) [7E23AC31-4E73-4726-A7B9-151F57A8001B] (Simulator)
iPad Pro (9.7-inch) (11.2) [6FD10B83-E012-4A01-82F4-833AFBF602DC] (Simulator)
iPhone 5s (11.2) [4E38DF1F-D5FF-4EF7-BCBC-39D45D1A3FF9] (Simulator)
iPhone 6 (11.2) [6082A07F-9B51-4B47-B821-7FA17050552F] (Simulator)
iPhone 6 Plus (11.2) [2C44FCB0-2414-4010-996A-6D572CC1532F] (Simulator)
iPhone 6s (11.2) [1F752F2B-7BB3-427A-AD75-C84676DF9259] (Simulator)
iPhone 6s Plus (11.2) [505E165D-9138-440F-ADAC-9B2F732C80D8] (Simulator)
iPhone 7 (11.2) [CAC3FBF3-EF6B-4C02-B777-2A8F836D2F24] (Simulator)
iPhone 7 (11.2) + Apple Watch Series 2 - 38mm (4.2) [B2DAA065-EC06-475E-8D7E-C0271048FD5A] (Simulator)
iPhone 7 Plus (11.2) [D1018F94-A83F-4A63-A56F-C8A0EF03288F] (Simulator)
iPhone 7 Plus (11.2) + Apple Watch Series 2 - 42mm (4.2) [865455A6-AB35-4056-AE51-51B3BB0C5995] (Simulator)
iPhone 8 (11.2) [252478EF-74C5-4BB1-BCB3-F6972D37A6A0] (Simulator)
iPhone 8 (11.2) + Apple Watch Series 3 - 38mm (4.2) [52DBED0B-9EF2-4352-A286-FB7C61690191] (Simulator)
iPhone 8 Plus (11.2) [634BF487-28E8-452B-891E-4EA3049DF3D2] (Simulator)
iPhone 8 Plus (11.2) + Apple Watch Series 3 - 42mm (4.2) [BB93A8FE-F1C3-4824-9977-F00AA294FC7F] (Simulator)
iPhone SE (11.2) [4E67039C-57CF-4483-9603-82B890788B0A] (Simulator)
iPhone X (11.2) [3CC4B576-B6C6-48C9-A1F7-7C03EF963BF5] (Simulator)
2.启动模拟器

xcrun instruments -w 'iPhone X'
iPhone X就是模拟器的名称
3.安装app

xcrun simctl install booted /Users/builder/builder/document/other/551/Payload/DYZB.app

xcrun simctl install booted是命令,后面的是需要安装的app路径,先去appstore下载或者自己打包编译的ipa,用归档工具打开,拖动playload文件夹下的程序文件到终端即可,按下enter,即可在模拟器上看到安装的app


4.启动app

xcrun simctl launch booted 'com.tencent.live4iphone'

com.tencent.live4iphone是腾讯视频的Bundle identifier,可通过playload文件夹下程序文件,右键有显示包内容,进入查看info.plist找到;

注:如果app不能运行在模拟器,会一直在启动,这时你可以手动启动,看看是不是一进去就退出,如果是,说明可能app有些库没有支持模拟器的,导致崩溃退出,很正常,一般app上线前会将适配模拟器的库去掉,减少体积。


5.卸载app

xcrun simctl uninstall booted 'com.tencent.live4iphone'

也是通过Bundle identifier来卸载




2017-01-18 09:13:32 drreamwork 阅读数 7350

iOS 9 以上的系统判断设备上是否有安装某app的两个方法:(主要是通过canOpenURL来打判断app是否存在
方法一:
  步骤一: 获取iOS设备上所有已经安装的app
 -(void)getAllApp
{
    Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
    NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
    NSArray *allApplications = [workspace performSelector:@selector(allApplications)];//这样就能获取到手机中安装的所有App
    NSLog(@"设备上安装的所有app:%@",allApplications);
}
打印出来的结果’:
2017-01-17 15:16:27.562 TRCloundDocumnet[751:209420] 设备上安装的所有app:(
    "<LSApplicationProxy: 0x12e563310> com.apple.Passbook <file:///Applications/Passbook.app>",
    "<LSApplicationProxy: 0x12e563bb0> com.apple.GameController <file:///Applications/GameController.app>",
    "<LSApplicationProxy: 0x12e564230> com.apple.managedconfiguration.MDMRemoteAlertService <file:///Applications/MDMRemoteAlertService.app>",
    "<LSApplicationProxy: 0x12e5646f0> com.apple.MailCompositionService <file:///Applications/MailCompositionService.app>",
    "<LSApplicationProxy: 0x12e564bd0> com.apple.calculator <file:///Applications/Calculator.app>",
    "<LSApplicationProxy: 0x12e5651f0> com.apple.SharedWebCredentialViewService <file:///Applications/SharedWebCredentialViewService.app>",
    "<LSApplicationProxy: 0x12e5656f0> com.apple.SafariViewService <file:///Applications/SafariViewService.app>",
    "<LSApplicationProxy: 0x12e565c40> com.apple.ios.StoreKitUIService <file:///Applications/StoreKitUIService.app>",
    "<LSApplicationProxy: 0x12e566150> com.apple.MobileStore <file:///Applications/MobileStore.app>",
    "<LSApplicationProxy: 0x12e566bc0> com.apple.tips <file:///Applications/Tips.app>",

   "<LSApplicationProxy: 0x12e586400> com.kingsoft.www.office.wpsoffice <file:///private/var/containers/Bundle/Application/135D6955-A45F-4A3E-971A-B601757E96A7/wpsoffice.app>",
    "<LSApplicationProxy: 0x12e586c60> com.tencent.mqq <file:///private/var/containers/Bundle/Application/AD66793A-7E19-4F50-93EB-05FA736E5D78/QQ.app>",
    "<LSApplicationProxy: 0x12e587530> jack.LQPhotoPickerDemo <file:///private/var/containers/Bundle/Application/4C433042-7208-4E33-8544-AAAB6716E4F7/LQPhotoPickerDemo.app>"
步骤二:
判断iOS设备上是否有安装某个app,判断依据是根据app 的Bundle Id。
从打印结果看出,我们上一步所获取到的allApplications数组中的元素是一个LSApplicationProxy类型的,我们要把这个转换成字符串, 这个字符串中不只包含了App的bundle ID,还包含了安装的路径,因为这个路径不唯一不确定,我们判断是否安装了某个App只需判断这个字符串中的bundle ID,所有我们还要对字符串做处理。前提是要知道你要判断的这个app的Bundle ID 是什么
-(void)isInstallLDApp:(NSArray *)allAPP

    NSInteger zlConnt = 0;
    for (NSString *appStr in allAPP) {
          NSString *app = [NSString stringWithFormat:@"%@",appStr];//转换成字符串
         NSRange range = [app  rangeOfString:@"LdWBrowserIPhone"];//是否包含这个bundle ID
           if (range.length > 1)
        {
            zlConnt ++;
            }
    }
       if (zlConnt >= 1) {
    NSLog(@"已安装天锐绿盾");
    }else{
        NSLog(@"没有安装天瑞绿盾");
    }
}
方法一的优点:   完美解决iOS9的canopenurl 白名单的限制  ,缺点: 遍历的过程中可能会消耗性能, App Store审核可能会被拒,前提是要知道你要判断的这个app的Bundle ID 是什么

方法二:
步骤一:首先要知道你要判断的这款app的UrlSchemes 是什么
备注: 
1,获取app的 urlschemes  的方法 

把相应的 app 的 ipa 安装文件下载下来,把文件 .ipa 的后缀改成 .zip,然后解压,打开 Payload/xxx.app/Info.plist 这个文件,找到 URL types 下的 URL Schemes 下的数组对应的值就是这个 app 的 URL Scheme 了 
2,简单验证一个 URL Scheme 是否正确的方法:
 在真机设备(此设备要安装了待验证的 app)里面打开 Safari,然后在地址栏中键入该应用的 URL Scheme,后加 ://,比如 Weico 的,在地址栏中键入 weico:// ,然后点击确定,如果能正常调用出 Weico,即代表这个 URL Scheme 正确可用
步骤二:  对于系统iOS 9来说,把需要检测的UrlScheme添加到白名单即可,添加方法:info.plist 增加LSApplicationQueriesSchemes (array类型),把要检测的app的UrlScheme加进去。

步骤三: 在代码中调用Application 的canopenUrl 的方法判断设备时候有对应的应用 程序,返回YES表示已安装了该app 
代码如下:
  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"IOSDevApp://"]])
{  //说明此设备有安装app
}else{
//说明此设备没有安装app

方法二的优点: 效率高,代码量小  ,但前提是要先知道要判断的app 的UrlSchemes.


苹果控制app安装的方式

博文 来自: u013282407

iOS 当前APP 名称和版本号

博文 来自: Obses_sion
没有更多推荐了,返回首页