Swift 3.0项目迁移的一些记录
刚执行完Convert后报错600+,真是令人奔溃。
之后重新编译,仔细分析后发现其实真实错误远没有那么多。最终实际修改到的错误也就几十个,而且其中某些还是同一种错误。
这个项目是一个供自己使用的浏览器项目,因为app store上的浏览器都不支持自动锁定横屏,所以自己做了一个简单的浏览器(支持自动锁定横屏/竖屏)供自己使用。
主要一些修改:
这个自动修复就好了
[报错信息] “Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.
[解决方案] 设置 Build Settings —-> Use Legacy Swift Language Version —-> YES/NO,改为YES。
这个项目里使用了coreData,而对coreData的操作则是通过一个第三方库SuperRecord,这个框架作者没有更新,所幸代码量不多,只有6,7个文件。所以我选择了自己完成代码的迁移,而没有去更换框架。
这个框架的报错,主要集中在
泛型的使用上:在swift 3.0中,扩展方法不容许使用原泛型定义中的类型参数
解决办法:以一个代理类来代替原来的对obj-c 泛型类的extension。
特别之处,swift 3中 泛型方法的调用不能直接传入类型参数
class A{
func a<T>(x:String)->T{
} func b<T>()->T{
// 不能写作 a<T>(""),而是通过参数列表或返回类型自动推断
//,所以无法定义一个参数列表和返回值里没有使用到全部类型参数的泛型方法
return a("")
}
}
NSDictionary 的值读取,要使用valueForKey方法,而不再能使用索引
字面量需要加类型转换
var dic = [String:AnyObject]()
// 必须明确 加上 as AnyObject
dic["a"] = [1,2] as AnyObjectfor i in 1..❤️ {} 绝对不能写作 for(i in 1..❤️){}
————
几个框架使用报错
二维码扫描页面、讯飞语音识别都是一打开相关页面就崩溃,需要修改plist,添加相机和麦克风的使用权限
在info.plist —Source Code形式打开后添加, 或者info.plist 在Property List 的形式下,然后点击添加,
输入 Privacy 可以迅速定位到这一权限系列,找到你需要的权限,修改后面的 value 就可以了
<!-- 相册 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<!-- 相机 -->
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>
<!-- 麦克风 -->
<key>NSMicrophoneUsageDescription</key>
<string>App需要您的同意,才能访问麦克风</string>
<!-- 位置 -->
<key>NSLocationUsageDescription</key>
<string>App需要您的同意,才能访问位置</string>
<!-- 在使用期间访问位置 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要您的同意,才能在使用期间访问位置</string>
<!-- 始终访问位置 -->
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要您的同意,才能始终访问位置</string>
<!-- 日历 -->
<key>NSCalendarsUsageDescription</key>
<string>App需要您的同意,才能访问日历</string>
<!-- 提醒事项 -->
<key>NSRemindersUsageDescription</key>
<string>App需要您的同意,才能访问提醒事项</string>
<!-- 运动与健身 -->
<key>NSMotionUsageDescription</key>
    <string>App需要您的同意,才能访问运动与健身</string>
<!-- 健康更新 -->
<key>NSHealthUpdateUsageDescription</key>
<string>App需要您的同意,才能访问健康更新 </string>
<!-- 健康分享 -->
<key>NSHealthShareUsageDescription</key>
<string>App需要您的同意,才能访问健康分享</string>
<!-- 蓝牙 -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要您的同意,才能访问蓝牙</string>
<!-- 媒体资料库 -->
<key>NSAppleMusicUsageDescription</key>
<string>App需要您的同意,才能访问媒体资料库</string>
复制代码
如果不起作用,可以请求后台权限,类似于这样:
<key>UIBackgroundModes</key>
<array>
<!-- 在这里写上你在后台模式下要使用权限对应的key -->
<string>location</string>
...
</array>
coredata 读取数据报错,则是因为表名和方法调用中传人的表名字符串必须完全一致,而我原来把首字母小写了。以前没问题,但现在
EntityDescription.entity会返还nil,导致数据读取失败。
let entity = NSEntityDescription.entity(forEntityName: "BookMark", in: appDelegate.managedObjectContext)												
											Swift 3.0项目迁移的一些记录的更多相关文章
- fir.im Weekly - Swift 3.0 的迁移适配指南
		
无论你是移动开发者,还是桌面端开发者,或者正在IoT领域探索的技术人员,那么应该更加关注 iDev 全平台开发者大会,也许是后半年 iOS 开发者最盛大的技术盛宴.既有知名公司带来专业视野,又有从 S ...
 - .NET 4.5+项目迁移.NET Core的问题记录
		
.NET 4.5+项目迁移.NET Core的问题记录 这几天试着把目前的开发框架迁移到新的.net core平台,中间遇到的问题在这里简单记录一下. 迁移过程遇到的最大的问题IOC容器.我目前使用的 ...
 - 将 Objective-C 代码迁移到 Swift(Swift 2.0更新)-b
		
本节内容包括: 为你的Objective-c代码做好迁移准备 (Preparing Your Objective-C Code for Migration) 迁移过程(The Migration Pr ...
 - 【一】Swift 3.0  新浪微博项目实战 -整体框架搭建
		
最近要接手swift,所以找了个视频跟着做一下实战项目,在此记录一下过程和心得 框架搭建和目录拆分 关键词:MVVM 架构,桥接文件 桥接文件用于引入OC的头文件,Swift就可以正常使用(宏除外). ...
 - Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例
		
本文目录 1. Net下日志记录 2. NLog的使用 2.1 添加nuget引用NLog.Web.AspNetCore 2.2 配置文件设置 2.3 依赖配置及调用 ...
 - iOS10.0  & Swift 3.0 对于升级项目的建议
		
iOS & Swift新旧版本更替, 在Apple WWDC大会开始之际, 也迎来了iOS 10.0, Swift 3.0 测试版, 到目前为止, 已经是测试版2.0, 每次更新都带来了新的语 ...
 - iOS开发系列--Swift 3.0
		
概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...
 - Swift 3.0 【Swift 3.0 相较于 Swift 2.2 的变化】
		
一.编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时 ...
 - NodeJS项目迁移兼Ubuntu下NodeJS环境部署
		
前言 之前做的几个项目都托管在阿里云服务器,但是最近要到期了.想着到底要不要续期,毕竟100/月.后面看着阿里云有个活动,800/三年.果断买下.环境部署折腾了一天,其中也遇到几个坑. 目录 一.安装 ...
 
随机推荐
- python爬虫requests 下载图片
			
import requests # 这是一个图片的url url = 'http://yun.itheima.com/Upload/Images/20170614/594106ee6ace5.jpg' ...
 - 前端插件之Bootstrap Switch 选择框开关控制
			
简介 Bootstrap Switch是一款轻量级插件,可以给选择框设置类似于开关的样式 它是依赖于Bootstrap的一款插件 下载 下载地址 在线引用 导入 因为它是依赖于Bootstrap的一款 ...
 - [NOIP2009][LuoguP1073] 最优贸易 - Tarjan,拓扑+DP
			
Description&Data 题面:https://www.luogu.org/problemnew/show/P1073 Solution Tarjan对联通块缩点,在DAG上按照拓扑序 ...
 - python基础——类名称空间与对象(实例)名称空间
			
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
 - POJ-2253 Frogger---最短路变形&&最大边的最小值
			
题目链接: https://vjudge.net/problem/POJ-2253 题目大意: 青蛙A想访问青蛙B,必须跳着石头过去,不幸的是,B所在的石头太远了,需要借助其他的石头,求从A到B的路径 ...
 - MongDB配置方法
			
先下载安装包 安装 方法一:命令行启动 在 C:\MongoDB\Server\3.4目录下建立data文件夹, data里面建立db文件夹 bin目录下运行 mongod --dbpath C:\M ...
 - IDLE常用快捷键汇总(转)
			
IDLE(An Integrated DeveLopment Environment for Python)是Python自带的编译器,在初学者,或写小程序,或用于验证的时候,经常用到!如果能熟练掌握 ...
 - Spring源码分析:Spring IOC容器初始化
			
概述: Spring 对于Java 开发来说,以及算得上非常基础并且核心的框架了,在有一定开发经验后,阅读源码能更好的提高我们的编码能力并且让我们对其更加理解.俗话说知己知彼,百战不殆.当你对Spri ...
 - Unity3D input.GetAxis
			
input.GetAxis用法:(GetAxis("Mouse X"),GetAxis("Mouse Y"),GetAxis("Mouse Scrol ...
 - mysql新建表设置为utf8
			
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;