文娱最前线 發表於 2020-3-20 17:38:00

ios开发 关于iOS13开发者需要注意的问题

<div>
<div>
<h4>1.KVC访问私有属性的崩溃问题</h4>
<p>在Xcode11上使用<code>- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath</code>方法访问私有属性,编译时会崩溃,例</p>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)"> forKeyPath</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)">:</span><span class="token string"><span style="color: rgba(136, 136, 136, 1)">@"_placeholderLabel.textColor"</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)">]</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)">;</span><span class="token comment"><span style="color: rgba(136, 136, 136, 1)">///崩溃
</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)"> forKeyPath</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)">:</span><span class="token string"><span style="color: rgba(136, 136, 136, 1)">@"_placeholderLabel.font"</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)">]</span><span class="token punctuation"><span style="color: rgba(136, 136, 136, 1)">;</span><span class="token comment"><span style="color: rgba(136, 136, 136, 1)">///崩溃</span><br><strong>不过使用<code>- (void)setValue:(nullable id)value forKey:(NSString *)key</code>方法正常,例如:<br></strong></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"><span class="token punctuation">; <span class="token comment">//正常</span></span></span></span></span></span></span></code></pre>
<div>
<div>
<h4>2.即将废弃的LaunchImage</h4>
<p>随着苹果设备的型号日益增多,利用LaunchImage来设置启动图显然显得不够明智。<br>
替代方式:使用LaunchScreen来设置启动图。LaunchScreen是iOS8引入的,支持AutoLayout+SizeClass,所以用起来十分方便。据消息,明年4月份后,所有app必须提供LaunchScreen了,尽早替换吧。</p>

</div>
<div>
<div>
<h4>3.完全废弃的UIWebView</h4>
<p>随着iOS13的到来,UIWebView的使用范围定格在了iOS12。很早时间之前UIWebView就因存在内存泄漏问题被苹果建议用WKWebView来替代。此次更是完全被废弃。现在上传AppStore的应用如果存在UIWebView,苹果会给你发邮件告诉你,UIWebView的API已经废弃了。So,赶紧替换。</p>
</div>
<div>
<div>
<h4>4.presentViewController的问题</h4>
<p>iOS 13 的 presentViewController 默认有视差效果,模态出来的界面现在默认都下滑返回。 一些页面必须要点确认才能消失的,需要适配。如果项目中页面高度全部是屏幕尺寸,那么多出来的导航高度会出现问题。所以手动设置一下Style吧</p>
</div>
<pre class="line-numberslanguage-objectivec"><span style="color: rgba(136, 136, 136, 1)"><code class="language-objectivec"><span class="token keyword">self<span class="token punctuation">.modalPresentationStyle <span class="token operator">= UIModalPresentationFullScreen<span class="token punctuation">;</span></span></span></span></code></span></pre>
</div>
<div>
<div>
<h4>5.暗黑模式的适配</h4>
<p>随着iOS13的到来,有了暗黑模式,需要我们开发者花更多精力去适配,尤其是那些重量级项目,很费时间。这里先不谈适配问题,以后再谈。如果不适配的话需要你全局关闭暗黑模式。<br>
方法:配置plist文件: 在Info.plist 文件中,添加UIUserInterfaceStyle key 名字为 User Interface Style 值为String,将UIUserInterfaceStyle key 的值设置为 Light。</p>
<h4>6.增加蓝牙权限申请</h4>
<p>iOS13以前,使用蓝牙时可以直接用,不会出现权限提示,iOS13后,再使用就会提示了。 在info.plist里增加</p>
<pre class="line-numberslanguage-xml"><span style="color: rgba(136, 136, 136, 1)"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;key<span class="token punctuation">&gt;NSBluetoothAlwaysUsageDescription<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/key<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;string<span class="token punctuation">&gt;我们需要使用您的蓝牙<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/string<span class="token punctuation">&gt;`</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></span></pre>
</div>
</div>
</div>
</div>
<h4>7.DeviceToken 获取</h4>
<p>DeviceToken 获取到的格式发生变化</p>
<pre class="line-numberslanguage-objectivec"><span style="color: rgba(136, 136, 136, 1)"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">include <span class="token string">&lt;arpa/inet.h&gt;
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)application<span class="token punctuation">:<span class="token punctuation">(UIApplication <span class="token operator">*<span class="token punctuation">)application didRegisterForRemoteNotificationsWithDeviceToken<span class="token punctuation">:<span class="token punctuation">(NSData <span class="token operator">*<span class="token punctuation">)deviceToken
<span class="token punctuation">{
    <span class="token keyword">if <span class="token punctuation">(<span class="token operator">!<span class="token punctuation"><span class="token punctuation">]<span class="token punctuation">) <span class="token keyword">return<span class="token punctuation">;
    <span class="token keyword">const <span class="token keyword">unsigned <span class="token operator">*tokenBytes <span class="token operator">= <span class="token punctuation"><span class="token punctuation">;
    NSString <span class="token operator">*hexToken <span class="token operator">= <span class="token punctuation">[NSString stringWithFormat<span class="token punctuation">:<span class="token string">@"%08x%08x%08x%08x%08x%08x%08x%08x"<span class="token punctuation">,
                        <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">0<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">, <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">1<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">, <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">2<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">,
                        <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">3<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">, <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">4<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">, <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">5<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">,
                        <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">6<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">, <span class="token function">ntohl<span class="token punctuation">(tokenBytes<span class="token punctuation">[<span class="token number">7<span class="token punctuation">]<span class="token punctuation">)<span class="token punctuation">]<span class="token punctuation">;
    <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"deviceToken:%@"<span class="token punctuation">,hexToken<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<br></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></span></pre>
<h4>8.MPMoviePlayerController 彻底弃用</h4>
<p>MPMoviePlayerController 在 iOS 9 开始被弃用,如果在 iOS 13 中继续使用的话会直接抛出异常:</p>
<pre class="line-numberslanguage-objectivec"></pre>
<div>
<div>
<h4>9.UISearchDisplayController彻底弃用</h4>
<p>在 iOS 8 之前,我们在 UITableView 上添加搜索框需要使用 UISearchBar + UISearchDisplayController 的组合方式。</p>
<p>在 iOS 8 之后,苹果就已经推出了 UISearchController 来代替这个组合方式。在 iOS 13 中,如果还继续使用 UISearchDisplayController会直接导致崩溃,崩溃信息如下</p>
</div>
<div>
<div><span style="color: rgba(136, 136, 136, 1)"><code class="language-php">Terminating app due to uncaught exception <span class="token single-quoted-string string">'NSGenericException'<span class="token punctuation">, reason<span class="token punctuation">: <span class="token single-quoted-string string">'UISearchDisplayController is no longer supported when linking against this version of iOS. Please migrate your application to UISearchController.'</span></span></span></span></code></span></div>
解决方法:使用UISearchController代替</div>
</div>
<pre class="line-numberslanguage-objectivec"></pre>
<h4>10..keyWindow API将被弃用</h4>
<pre class="line-numberslanguage-objectivec"></pre>
<pre class="line-numberslanguage-objectivec"><span style="color: rgba(136, 136, 136, 1)"><code class="language-objectivec"><span class="token keyword">@property<span class="token punctuation">(nullable<span class="token punctuation">, nonatomic<span class="token punctuation">,readonly<span class="token punctuation">) UIWindow <span class="token operator">*keyWindow <span class="token function">API_DEPRECATED<span class="token punctuation">(<span class="token string">"Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes"<span class="token punctuation">, <span class="token function">ios<span class="token punctuation">(<span class="token number">2.0<span class="token punctuation">, <span class="token number">13.0<span class="token punctuation">)<span class="token punctuation">)<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></span></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property"><span class="token directive keyword"><span class="token string"><span class="token operator"><span class="token punctuation"><span class="token keyword"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token operator"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token operator"><span class="token punctuation"><span class="token punctuation"><span class="token keyword"><span class="token punctuation"><span class="token operator"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token keyword"><span class="token punctuation"><span class="token keyword"><span class="token keyword"><span class="token operator"><span class="token operator"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token operator"><span class="token operator"><span class="token punctuation"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token function"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation">修改使用下方代码获取</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-json"><span style="color: rgba(136, 136, 136, 1)"><code class="language-json"><span class="token punctuation">[<span class="token punctuation">[<span class="token punctuation"> windows<span class="token punctuation">] objectAtIndex<span class="token operator">:<span class="token number">0<span class="token punctuation">]
</span></span></span></span></span></span></span></span></code></span></pre>
<pre class="line-numberslanguage-csharp"><code class="language-csharp">原文出处https://www.jianshu.com/p/4409ccf98070</code></pre>
</div>
</div><br><br>
来源:https://www.cnblogs.com/daijiahong/p/12533195.html
頁: [1]
查看完整版本: ios开发 关于iOS13开发者需要注意的问题