2018-11-23 11:12:48 lipeixiong 阅读数 543

1.前言

 因为最近在写2个新app,遇到一些适配问题,所以我在这里总结了一下,分享给大家。

2.安卓6.0的适配

 6.0权限申请

 

分组

名字

分割线

PHONE

android.permission.READ_PHONE_STATE

 

 

android.permission.CALL_PHONE

 

 

android.permission.READ_CALL_LOG

 

 

android.permission.ADD_VOICEMAIL

 

 

android.permission.WRITE_CALL_LOG

 

 

android.permission.USE_SIP

 

 

android.permission.PROCESS_OUTGOING_CALLS

 

CALENDAR

android.permission.READ_CALENDAR

 

 

android.permission.WRITE_CALENDAR

 

CAMERA

android.permission.CAMERA

 

CONTACTS

android.permission.READ_CONTACTS

 

 

android.permission.WRITE_CONTACTS

 

 

android.permission.GET_ACCOUNTS

 

LOCATION

android.permission.ACCESS_FINE_LOCATION

 

 

android.permission.ACCESS_COARSE_LOCATION

 

MICROPHONE

android.permission.RECORD_AUDIO

 

SENSORS

android.permission.BODY_SENSORS

 

SMS

android.permission.SEND_SMS

 

 

android.permission.RECEIVE_SMS

 

 

android.permission.READ_SMS

 

 

android.permission.RECEIVE_WAP_PUSH

 

 

android.permission.RECEIVE_MMS

 

STORAGE

android.permission.READ_EXTERNAL_STORAGE

 

 

android.permission.WRITE_EXTERNAL_STORAGE

 

对于同一组内的权限,只要有一个被同意,其他的都会被同意。

3.Android 7.0的适配

3.1 应用间共享文件

targetSdkVersion大于等于的24App中,但是我们没有去适配7.0。那么在调用安装页面,或修改用户头像操作时,就会失败。那么就需要你去适配7.0或是将targetSdkVersion改为24以下(不推荐)。适配的方法这里就不细讲,大家可以看鸿洋大神的 Android 7.0 行为变更 通过FileProvider在应用间共享文件这篇文章

3.2 APK signature scheme v2

Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,Android Studio 2.2 Android Plugin for Gradle 2.2 会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用

 

1)只勾选v1签名就是传统方案签署,但是在7.0上不会使用V2安全的验证方式。

2)只勾选V2签名7.0以下会显示未安装,7.0上则会使用了V2安全的验证方式

3)同时勾选V1V2则所有版本都没问题

3.3 org.apache不支持问题

build.gradle里面加上这句

defaultConfig { useLibrary 'org.apache.http.legacy' }

3.4 SharedPreferences退

SharedPreferences read = getSharedPreferences(RELEASE_POOL_DATA, MODE_WORLD_READABLE); //MODE_WORLD_READABLE 8.0以后不能使用这个获取,会闪退,修改成MODE_PRIVATE

Android 8.0的适配

 

4.1 安卓8.0PHONE权限组新增两个权限

 ANSWER_PHONE_CALLS:允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 acceptRingingCall() 函数。 READ_PHONE_NUMBERS :权限允许您的应用读取设备中存储的电话号码

4.2 通知适配

安卓8.0中,为了更好的管制通知的提醒,不想一些不重要的通知打扰用户,新增了通知渠道,用户可以根据渠道来屏蔽一些不想要的通知

4.3 安装APK

首先在AndroidManifest文件中添加安装未知来源应用的权限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

 

4.5 静态广播无法正常接收

问题原因: Android 8.0 引入了新的广播接收器限制,因此您应该移除所有为隐式广播 Intent 注册的广播接收器

解决方案: 使用动态广播代替静态广播

4.6 Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

问题原因: Android 8.0 非全屏透明页面不允许设置方向 解决方案:android:windowIsTranslucent设置为false

Android 9.0的适配
 

9.1 CLEARTEXT communication to life.115.com not permitted by network security policy

问题原因: Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉

解决方案:

在资源文件新建xml目录,新建文件

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>

清单文件配置:

<application android:networkSecurityConfig="@xml/network_security_config"> <!--9.0--> <uses-library android:name="org.apache.http.legacy" android:required="false" /> </application>

但还是建议都使用https进行传输

 

2016-12-20 15:01:18 iOSTianNan 阅读数 1998

参考链接

iOS 9 HTTPS适配 
http://www.jianshu.com/p/b03ae4a1a2d3

IOS Https适配摸索
http://www.jianshu.com/p/f312a84a944c


 关于https的简介和说明我都是参考下面的文章:(谢谢文章作者)

1.http://my.oschina.net/vimfung/blog/494687

2.http://oncenote.com/2014/10/21/Security-1-HTTPS/ 

3.http://blog.csdn.net/dachao_me/article/details/48624685?ref=myread

马上就要2017年1月1号, 不知苹果会如何限制http类的接口,所以适配https还是早作打算

上面的链接基本看一遍 ,应该就能做好适配,而且如果只是简单的对部分接口做https 那应该不会太难

1.首先你要问后台拿到证书(jks格式/Mac:.cer格式) ,或者你可以打开请求的完整链接 在Mac上下载该证书 (导入Xcode工程)

这里写图片描述

2.删除之前为了跳过https而在plist.info里面的key

这里写图片描述

3.在AFNetWorking3.0 中 添加获取证书

-(void)getHttpsImageInfo{
    NSString *striCer = [[NSBundle mainBundle] pathForResource:@"StartCom Certification Authority" ofType:@"cer"];
    NSData *data = [NSData dataWithContentsOfFile:striCer];
    NSSet *set = [NSSet setWithObject:data];

    AFSecurityPolicy *securityPplicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    securityPplicy.allowInvalidCertificates = YES;
    securityPplicy.validatesDomainName = YES;
    [securityPplicy setPinnedCertificates:set];

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"image/png", nil];
    [manager GET:@"https://www.jiefengpay.com:8443/app/andorid/1.png" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        NSLog(@"********************* %@",downloadProgress);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@%@",responseObject,[responseObject class]);
        NSData *data = responseObject;
        UIImage *image = [UIImage imageWithData:data];
        UIImageView *vi = [[UIImageView alloc] initWithImage:image];
        vi.frame = [UIScreen mainScreen].bounds;
        [[UIApplication sharedApplication].keyWindow addSubview:vi];
        NSLog(@"++++++++++++++++++++++++++++++++++");
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);

    }];

}

做过Https适配后的请求结果

这里写图片描述

同时,后台没有做https的请求结果error

这里写图片描述

2015-12-06 13:39:17 Kevindongkun 阅读数 3276

iOS9.0适配

一、网络适配由Http改成Https:

1.问题:iOS9.0SDK在编译的时候,默认所有从NSURLConnection、CFURL和NSURLSession发出的http请求,都改为https请求。由于AFNetworking版本底层是用了NSURLConnection,所以使用AFNetworking的app都将受到影响。

2.解决方案:

(1).服务器升级:

方案最佳,但是费用贵,小公司养不起;

 http存在以下主要风险:

    a、窃听风险:第三方可以获得通信内容。

    b、篡改风险:第三方可以修改通信内容。

    c、冒充风险:第三方可以冒充他人来进行通信。

  https好处如下:

    a、所有信息都是加密传播,第三方无法窃取。

    b、具有校验机制,一旦通信内容被篡改,通信双方可以立即发现。

    c、配备身份证书,防止他人冒充。

(2).转换到http:最常用的方法:

方法一:

1、在info.plist中增加NSAppTransportSecurity字段,NSDictionary;

2、在NSAppTransportSecurity下添加一个Key:NSAllowsArbitraryLoads, Boolean类型,设为YES;

方法二:

info.plist--->右键Open As --->Source Code:

添加代码:

<key>NSAppTransportSecurity</key>

<dict>

<key>NSAllowsArbitraryLoads</key>

<true/>

</dict>

(3).转换到http:设置域

把不支持https协议的接口设置成HTTP的接口

1、在info.plist中增加一个key:NSAppTransportSecurity, NSDictionary;

2、在NSAppTransportSecurity下增加:NSExceptionDomains, NSDictionary;

3、把需要支持的域给添加到NSExceptionDomains里,其中域为key, NSDictionary;

4、每个域下需要设置3个属性:NSIncludesSubdomains, NSExceptionRequiresForwardSecrecy, NSExceptionAllowsInsecureHTTPLoads, 都是Boolean类型,值分别是:YES, NO, YES;

例如:新浪微博



二、Bitcode:

(1).苹果为什么要引入bitcode?
答:引入bitcode的主要作用是给app瘦身
苹果官方文档:
Slicing is the process of creating and delivering variants of the app bundle for different target devices. A variant contains only the executable architecture and resources that are needed for the target device. You continue to develop and upload full versions of your app to iTunes Connect. The App Store will create and deliver different variants based on the devices your app supports. Image 
resources are sliced according to their resolution and device family. GPU resources are sliced according to device capabilities. When the user installs an app, a variant for the user’s device is
downloaded and installed.
 
Xcode simulates slicing during development so you can create and test variants locally. Xcode slices your app when you build and run your app on a device. When you create an archive, Xcode includes the full version of your app but allows you to export variants from the archive.
翻译成中文:

当前app的打包方式是把适配兼容多个设备的执行文件与资源文件合并成一个文件,上传和下载的文件则包含了所有的这些文件,导致占用较多的存储空间。

    app瘦身就是让iOS设备在安装、更新以及运行app等场景中仅下载所需的资源,从而节省设备的存储空间。


 (2).根据官方的解释,主要有以下三个方面:

    1、Slicing 

    当把app打包上传到AppStore的时候,服务器会自动对包切割为不同的应用变体,当用户下载安装包的时候,系统会根据设备型号下载对应的应用变体。

    2、Bitcode

    开启bitcode编译后,可以让开发者上传app只需要上传中间二进制文件,而非最终的可执行二进制文件。在用户下载app之前,AppStore会自动编译中间二进制文件,从而生成可执行的二进制文件。

    3、On-Demand Resources

    所需资源是指开发者对资源添加标签上传后,系统会根据app运行的情况,动态下载并加载所需资源,如果存储空间不足时,自动删除这些资源。


(3) 先看下Apple对其的解释:

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.

翻译成中文:Bitcode是被编译程序的一种中间形式的代码。包含Bitcode配置的应用将在App Store上被编译和链接。Bitcode允许苹果在后期重新优化我们应用的二进制文件,而不需要我们重新提交一个版本到App Store上。

Note: For iOS apps, bitcode is the default, but optional. If you provide bitcode, all apps and frameworks in the app bundle need to include bitcode. For watchOS apps, bitcode is required.

就是说,如果用Xcode7创建的app默认是包含有bitcode,但是是可以选择的。如果,我们的app包含了bitcode,我们工程中所有的第三方sdk必须也得支持bitcode,否则的话,就会报错误的。错误如下:


解决方案:

    方案一:把不支持Bitcode的SDK给移除掉,等待第三方更新SDK。而目前大部分社交平台的SDK并不支持Bitcode。

    方案二:把Bitcode给关闭掉,方法如下:

Build Settings--->搜索bitcode:



三、Scheme白名单:

从iOS9.0后,涉及到平台客户端的跳转,系统会自动到info.plist下检查是否设置Scheme。如果没有做相应的配置,就无法跳转到相应的客户端。因此如果客户端集成有分享与授权,需要配置Scheme白名单。

    解决方案:

    (1)、在info.plist增加key:LSApplicationQueriesSchemes,类型为NSArray。

    (2)、添加需要支持的白名单,类型为String。


    新浪微博白名单:sinaweibo、sinaweibohd、sinaweibosso、sinaweibohdsso、weibosdk、weibosdk2.5。

    微信白名单:wechat、weixin。

    支付宝白名单:alipay、alipayshare。

    QQ与QQ空间白名单:mqzoneopensdkmqzoneopensdkapi、mqzoneopensdkapi19、mqzoneopensdkapiV2、mqqOpensdkSSoLogin、mqqopensdkapiV2、mqqopensdkapiV3、wtloginmqq2、mqqapi、mqqwpa、mqzone、mqq

   

 另外,如果应用使用了检测是否安装了某款app,我们会调用canOpenURL, 如果url不在白名单中,即使手机上有这款app,也会返回NO。

    补充:在使用sharesdk进行分享的时候,如果你设置有微信、QQ、QQ空间分享,并且你也把相应的白名单给添加进去了,但是如果你手机上没有装QQ的时候,也是不会出现分享到QQ的选项。


四、iPad适配Slide Over 和 Split View:

    若想适配multi tasking特性,建议不使用纯代码,改用storyboard、xib的形式。

补充,本文所说的都是iOS9.0SDK的新特性,如果你的app版本是基于iOS8.X、iOS7.X,并不受iOS9.0新特性约束。也就是说Xcode7给iOS8.X打设备包不需要白名单也能调用canOpenURL,但是Xcode7给iOS9.X打包则需要,Xcode7和iOS9缺一不可。



 


2016-01-10 12:56:16 ZZ825194632 阅读数 1692

先说下要适配iOS9要做的事:

1.更改http为https 

两种方案:

一.公司后台服务器更改;

二.作为开发者,可在Xcode暂时退回到http协议.  开发者更改方法如下:

1.在Info.plist中添加App Transport Security Settings (或NSAppTransportSecurity), 类型Dictionary。
2.在App Transport Security Settings下添加Allow Arbitrary Loads (或NSAllowsArbitraryLoads), 类型Boolean,值设为YES.

 

2.对于使用ShareSDK第三方登录或分享,对iOS9的适配

可参考官方文档详细介绍:                     适配iOS 9系统                 

包括:https协议支持,关闭bitcode支持,添加Scheme白名单.

 

3.Xcode7报错:Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:]

    从iOS9开始,Xcode7需要所有UIWindow在makeKeyAndVisible之前必须有一个rootViewController,否则报以上错误。

    解决方案:

    UIViewController *emptyView = [[UIViewController allocinit];

    self.window.rootViewController = emptyView;

    [self.window makeKeyAndVisible];

 

4.Xcode7打开旧项目FrameWork文件夹下的.dylib库缺失,添加方法

     项目Target中Link Binary With Libraries  点击下方 “+”添加,  显示搜索页面,在此搜.dylib搜不出来(只能搜到同名的.tbd), 需点击 Add Other,出现文件目录页面 (正常情况通过Finder同样找不到.dylib文件,因该文件是隐藏文件。需按快捷键 CMD+Shift+G,输入/usr/lib后进入隐藏界面,然后添加需要的.dylib即可。

 

5.Xcode7 真机测试,真机出现"unavailable"字样,Could not find developer disk image.

stackoverflower答案: 点击查看

解决方案:
先关闭Xcode.再从Xcode 6.4中,拷贝8.4 (12H141)文件夹到Xcode 7的对应目录下.
Xcode 6.4路径为:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

Xcode 7路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
重新打开Xcode 7,打开项目,需要等一会,等到菊花不转了,才能运行。

 

6.App上传Appstore错误

ERROR ITMS-90049:"This bundle is invalid. The bundle identifier contains disallowed characters. [See the section of the Application Programming Guide entitled The Application Bundle.]"


解决方案:  
在项目导航栏搜索Info.plist文件

 
查找第三方的info.plist文件,如ShareSDK中的腾讯Bundle文件下的Info.plist文件。
在该文件下添加或者修改以下几个字段:
  • Bundle version
  • Bundle identifier
  • Bundle versions string, short
需要和系统自带的Info.plist文件一样。 如下图

 

7.App上传Appstore错误

invalid package Applications built with SDK 9.0 or later must be packaged as proper IPA files.

解决方案:
按照错误提示原先上传的是.zip文件,现在需要上传 .ipa文件。也就是需要将打包成的app在打包成ipa文件就可以了。
具体步骤:
1、新建文件夹 Payload 
2、将xcode编译好的app放在Payload文件夹中
3、压缩Payload文件夹为 .zip文件,然后重命名为 .ipa  重新上传即可
 
附快捷shell脚本:  将脚本放在Release-iphones文件夹下,运行该脚本就可将app转换为ipa。
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
APPNAME="appName"
ZIPNAME="zipName"
IPANAME="ipaName"
 
mkdir ./ipa/Payload
cp -r ./${APPNAME}.app ./ipa/Payload
cd ipa
zip -r ${ZIPNAME} *
mv ${ZIPNAME}.zip ${IPANAME}.ipa

 

8.App上传Appstore错误

ERROR ITMS-90535 Unexpected CFBundleExecutable Key. 

 解决方案:

1,用XCode 6.4的Product -> Archive,再提交到AppStore。
2,在Stackoverflow上也有相关的解决办法,就是把无用的CFBundle删除掉。点击查看
在工程里面搜索info.plist,可以先搜索info,找到第三方的info.plist文件,删除里面的Executable file对应的一整行,包括值。
例如:找到腾讯的info.plist  

 
 
删除箭头指向的一行,即可.

 
9.未解决问题,哪位大神看到
<1> 真机运行启动时崩溃,并非100%出现,出现率在80%左右,不清楚是什么原因,有知道的解答一下或者给个思路
dyld`gdb_image_notifier:

 ->  0x2be590cc <+0>: bx     lr

 在网上看到的答案:

选 Project,然后进 BuildPhases,然后进 LinkBinaryWithLibraries. 找到 GLKit.Framework ,把它的 status 更改为 optional 就 ok.(如果没有GLKit.Framework, 添加一个再设置)

因bug无法重现,无法验证以上方法是否可行.

 

<2>Xcode7.1真机测试启动崩溃,模拟器正常,添加Enable Address Sanitizer调试,崩溃在启动页.

暂时解决办法: 用Xcode 6.3.2运行打包即可.

libclang_rt.asan_ios_dynamic.dylib`__asan::AsanDie:
->  0x5e8240 <+0>:   push   {r4, r5, r7, lr}  //代码崩溃在此行
    0x5e8242 <+2>:   add    r7, sp, #0x8
    0x5e8244 <+4>:   dmb    ish

打印信息如下:

AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use the 'memory history' command.
==891==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==891==ASan shadow was supposed to be located in the [0x3ffff000-0x5fffffff] range.
==891==Process memory map follows:
    0x3af88000-0x3af89000    /usr/lib/libgcc_s.1.dylib
    0x3da44000-0x434ec000    /usr/lib/libgcc_s.1.dylib
    0x36556000-0x3655f000    /System/Library/PrivateFrameworks/MobileBluetooth.framework/MobileBluetooth
    0x3cf7c000-0x3cf7d000    /System/Library/PrivateFrameworks/MobileBluetooth.framework/MobileBluetooth
    0x3da44000-0x434ec000    /System/Library/PrivateFrameworks/MobileBluetooth.framework/MobileBluetooth
    0x34a47000-0x34a4e000    /System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager
    0x3c671000-0x3c673000    /System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager
    0x3da44000-0x434ec000    /System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager

........省略中间部分

    0x3b1a3000-0x3b2f5000    /usr/lib/libicucore.A.dylib
    0x3d91a000-0x3d92c000    /usr/lib/libicucore.A.dylib
    0x3da44000-0x434ec000    /usr/lib/libicucore.A.dylib
    0x3b92b000-0x3b9c2000    /usr/lib/libsqlite3.dylib
    0x3d977000-0x3d979000    /usr/lib/libsqlite3.dylib
    0x3da44000-0x434ec000    /usr/lib/libsqlite3.dylib
    0x005b0000-0x00604000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib
    0x00604000-0x00a60000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib
    0x00a60000-0x00aa0000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib
    0x005ad000-0x005ae000    /Library/MobileSubstrate/MobileSubstrate.dylib
    0x005ae000-0x005af000    /Library/MobileSubstrate/MobileSubstrate.dylib
    0x005af000-0x005b0000    /Library/MobileSubstrate/MobileSubstrate.dylib
    0x00010000-0x00014000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/wojsww
    0x00014000-0x00370000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/wojsww
    0x00370000-0x003f4000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/wojsww
    0x003f4000-0x005ac000    /var/mobile/Applications/D0115D17-C682-41AD-8E5C-D9DA83CF1053/wojsww.app/wojsww
==891==End of process memory map.
AddressSanitizer report breakpoint hit. Use 'thread info -s' to get extended information about the report.

2015-11-20 21:07:23 Vic__li 阅读数 1114

10月15日消息,今天苹果iOS版支付宝迎来了9.2版本更新,多个重磅新功能让新版支付宝变得更加强大。生活圈和“阅后即焚”的加入让支付宝渐渐不再是一个简单的支付工具,更像是一个集成支付功能的社交软件。

此外,iOS版支付宝9.2变得更加国际化,支持简体中文、繁体中文以及英文互相切换,同时还适配了iPhone6s/6s Plus的3D Touch。总之新功能众多,值得更新尝试。

iOS版支付宝9.2中的新功能:

1、国际化的支付宝,支持简体中文、繁体中文、英文3种语言切换。

2、增加生活圈,支持将视频和照片分享给朋友。

3、聊天增加「阅后即焚」,不再惧怕说错话。

4、页面布局优化,「卡券」功能移至首页,「我的信息」移至「财富」。

5、适配iPhone6s/6s Plus,增加3D Touch操作。

苹果iPhone、iPad、iPod Touch等苹果iOS设备用户,可以前往App Store中获取此次更新:点此前往

[IOS]适配IOS9

阅读数 378

适配iOS9笔记

阅读数 701

iOS9.0 https适配

阅读数 8

没有更多推荐了,返回首页