我已经安装了Xcode 8.0并将Swift 2.2转换为3.0(这个过程也花费了很多时间,我只是让我的Mac一整夜都在运行)。我没有一个大项目(大约20个文件)。我也在使用DerivedData
。索引以前的Xcode版本(< 8.0)工作得很快,但现在,升级后,进度条停留在一个位置(我已经等了一个小时)。
我尝试过的对我没有帮助的事情:
Pods
文件夹并重新启动Xcode <project>.xcworkspace
目录htonl
,然后重新安装当开发人员花费数小时来解决这些荒谬的问题时,制作这样的软件版本真的不是很酷。这非常令人失望。 任何想法如何解决这个问题?
答案 0 :(得分:51)
转到项目设置,然后转到编辑器&gt;添加构建设置&gt;添加用户定义的设置,并添加以下内容:
private void drawCenteredCircle(Graphics g, int x, int y, int radius) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(pointColor);
g2.fill(new Ellipse2D.Float(x-radius, y-radius, 2*radius, 2*radius);
g2.dispose();
}
添加此标志会将我们的清理构建编译时间从7分钟下降到65秒,这对于40KLOC swift项目来说是奇迹般的。也可以确认2位朋友在企业项目上看到了类似的改进。
我只能假设这是Xcode 8.0中的某种错误
答案 1 :(得分:24)
我通过评论所有文件然后逐个删除评论来解决问题。我发现问题仍然在数组声明中,如here所述。
我有这样的代码而且项目没有索引:
class {
var first: String!
var second: String!
var third: String!
var fourth: String!
var fifth: String!
func abc() -> [String] {
var array = [first, second, third, fourth, fifth]
}
}
我已将其更改为此并且索引开始工作:
class {
var first: String!
var second: String!
var third: String!
var fourth: String!
var fifth: String!
func abc() -> [String] {
var array = [first]
array.append(second)
array.append(third)
array.append(fourth)
array.append(fifth)
}
}
答案 2 :(得分:6)
自从升级到Swift 3 / XCode 8以来,我遇到了同样的问题,它似乎是由大数组文字引起的。
我能够通过向分配给数组文字的变量添加类型注释来解决问题,例如。
let array: Array<String> = ["1", "2", "3", "4", "5", "6", "7", "8"]
而不是
let array = ["1", "2", "3", "4", "5", "6", "7", "8"]
答案 3 :(得分:5)
我遇到了类似问题并按照本指南进行调试:http://irace.me/swift-profiling 我的问题是我在某些字符串中使用了nil coalescing运算符,例如:
let name = "\(someString ?? "")"
这四种方法造成2分钟的建筑时间。
答案 4 :(得分:5)
我有同样的问题并通过逐行仔细检查我的代码来解决它,结果是Swift 3更喜欢字符串插值而不是使用+符号,即
let url = "http://yahoo.com" + "someWebPage" + "whereItsInteresting"
如果您一直使用上述代码风格,请将其替换为;
let url = "http://yahoo.com\(someWebPage)\(whereItsInteresting)"
您的构建时间将立即恢复正常。
答案 5 :(得分:3)
答案 6 :(得分:2)
答案 7 :(得分:1)
我遇到了相同的索引问题,但只有当我在设备上运行/调试然后切换到左上角工具栏上的另一台设备(目标&gt; iPhone)时才会发生。
上述解决方案均不适合我。
我的解决方案:我删除了我当地的git工作副本,并从我的原始版本克隆了一个新版本。
(xcuserdata / shared / session等文件夹中有一些&#39; magic&#39;文件可能导致此问题?)
答案 8 :(得分:1)
不是说我认为这与OP的问题有关,但最近我的XCode 8已经放慢了速度。我最终发现这是我的错(我记得无意中这样做了) - 我添加了XCode.app作为框架参考。这实际上使XCode搜索并索引整个XCode.app文件夹。一旦我看到错误并删除框架,它再次变好了:)
答案 9 :(得分:1)
我有一个花了一分多钟时间编译的功能,经过一些调查后,我发现罪魁祸首是检查是否有足够的时间从存储的日期开始:
let myStoredDate: Double = // Double representing a time in the past
// if at least one week (60 * 60 * 24 * 7 seconds) has passed since myStoredDate
if Date().timeIntervalSince1970 - myStoredDate > (60 * 60 * 24 * 7){
// do stuff
}
这段代码需要10秒以上的时间才能编译 - 再加上这段代码多次重复使用不同的数字,这导致编译时间过长。我能够通过预先计算间隔
来解决这个问题let myStoredDate = // Double representing a time in the past
//it is important to explicitly specify that the variable is a Double
let interval: Double = 60 * 60 * 24 * 7
if Date().timeIntervalSince1970 - myStoredDate > interval{
// do stuff
}
在我检查的~10次之后,编译时间从一分钟缩短到几毫秒。
在其他地方将类型感染和数学结合起来也很可能会出现这个问题,所以请确保代码中的任何其他地方都不会发生这种情况。
答案 10 :(得分:1)
我的问题是字典。我的大词典不尽相同。
let values = ["address":addressTextField.text,"city":cityTextField.text,"zipCode":zipCodeTextField.text,"state":stateTextField.text,"pet":answerLabel.text,"rentStart":rentStartTextField.text,"rentEnd":rentEndTextField.text,"rent":rentTextField.text,"phone":phoneTextField.text,"email":emailTextField.text,"status":leaseStatusTextField.text,"bedrooms":bedroomTextField.text,"parking":parkingLabel.text,"furnish":furnishLabel.text,"utilities":utilitiesTextField.text,"laundry":laundryTextField.text,"paymentCycle":paymentCycleTextField.text,"note":noteTextView.text]
我把它分解为:
var values = ["address":addressTextField.text]
values["city"] = cityTextField.text
values["zipCode"] = zipCodeTextField.text
values["state"] = stateTextField.text
values["pet"] = answerLabel.text
values["rentStart"] = rentStartTextField.text
values["rentEnd"] = rentEndTextField.text
values["rent"] = rentTextField.text
values["phone"] = phoneTextField.text
values["email"] = emailTextField.text
values["status"] = leaseStatusTextField.text
values["bedrooms"] = bedroomTextField.text
values["parking"] = parkingLabel.text
values["furnish"] = furnishLabel.text
values["utilities"] = utilitiesTextField.text
values["laundry"] = laundryTextField.text
values["paymentCycle"] = paymentCycleTextField.text
values["note"] = noteTextView.text
values["owner"] = userID
答案 11 :(得分:0)
添加设置后,
SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
我们的项目清理 - 编译时间从1200s到180s,650个swift文件。但这会导致编译失败。当增加编译只需要60s
时,每次更改都需要180s才能编译答案 12 :(得分:0)
这是一个Xcode错误(Xcode 8.2.1),当你有一个大字典文字或嵌套字典文字时会发生这种错误。您必须将字典拆分为较小的部分,并使用append方法添加它们,直到Apple修复该错误。
答案 13 :(得分:0)
这适用于Xcode 8.2.1和Swift 3,当&#34;索引&#34;卡住了:
我总是打开两个项目,一个虚拟项目和我正在进行的项目。我还连接了一台iPad Air设备,我可以运行我的项目。当我的项目停留在&#34;索引&#34;时,我切换到我的虚拟项目并在我连接的iPad Air设备上运行我的项目。然后我停止了这个项目 并切换回我正在进行的项目和#34;索引&#34;神奇地完成了。如果您没有连接物理设备,这也应仅适用于模拟器。
答案 14 :(得分:0)
我遇到了类似的问题,并开发了自己的实用程序 ? Rugby。
在当前版本中,Rugby
可以缓存所有远程 Pod 依赖项并从 Pods
项目中删除它们的目标。\
在幕后,它正在使用一些优化。例如,像 SWIFT_COMPILATION_MODE=wholemodule
。
答案 15 :(得分:-1)
解决这个问题的方法是使用键来设置字典值
let dict: [string:any]()
dict["key"] = "value"
dict["key1"] = "value"
dict["key2"] = "value"
return dict
如果你有一个很长的字典,它可能会或可能不会导致编译循环,导致构建时间过长。任何超过8个键的东西都应该设置。