更新到Xcode 10.2 / Swift 5后无法构建macOS项目

时间:2019-03-26 21:02:02

标签: swift xcode swift5

我的项目在更新Xcode之前构建良好。

但是,现在我不能再构建该项目。使用Swift 5时,构建项目永远不会完成。它停止在“构建70个100任务”中,并且永远不会完成。这些数字也不总是相同的,但是它永远不会完成。

如果我尝试使用Xcode将我的项目从Swift 4.2转换为Swift 5,则同样无法完成转换。

如果我尝试更改工具链以使用Swift 4.2.1版本的工具链,则代码可以成功编译,但是在运行时我会立即崩溃:

<div class = "container-1">
    <div class="box-1">
        <div class="box-1">E |</div>
        <div class="box-1">A |</div>
        <div class="box-1">D |</div>
        <div class="box-1">G |</div>
        <div class="box-1">B |</div>
        <div class="box-1">E |</div>
      </div>
  <div class = "container-2" *ngFor="let currentTab of tabs;">
    <div *ngIf="currentTab.string == 0; then thenBlock else elseBlock"></div>
    <ng-template class="box-1" #thenBlock>{{currentTab.tab}}</ng-template>
    <ng-template class="box-1" #elseBlock>-</ng-template>
    <div *ngIf="currentTab.string == 1; then thenBlock else elseBlock"></div>
    <ng-template class="box-1" #thenBlock>{{currentTab.tab}}</ng-template>
    <ng-template class="box-1" #elseBlock>-</ng-template>
    <div *ngIf="currentTab.string == 2; then thenBlock else elseBlock"></div>
    <ng-template class="box-1" #thenBlock>{{currentTab.tab}}</ng-template>
    <ng-template class="box-1" #elseBlock>-</ng-template>
    <div *ngIf="currentTab.string == 3; then thenBlock else elseBlock"></div>
    <ng-template class="box-1" #thenBlock>{{currentTab.tab}}</ng-template>
    <ng-template class="box-1" #elseBlock>-</ng-template>
    <div *ngIf="currentTab.string == 4; then thenBlock else elseBlock"></div>
    <ng-template class="box-1" #thenBlock>{{currentTab.tab}}</ng-template>
    <ng-template class="box-1" #elseBlock>-</ng-template>
    <div *ngIf="currentTab.string == 5; then thenBlock else elseBlock"></div>
    <ng-template class="box-1" #thenBlock>{{currentTab.tab}}</ng-template>
    <ng-template class="box-1" #elseBlock>-</ng-template>
  </div>
</div>

我尝试清理项目并删除派生数据,但似乎都无法正常工作。

如果我使用Xcode 10.1,则该项目将继续构建并正常运行。

4 个答案:

答案 0 :(得分:2)

我的一些代码存在问题,涉及以自定义方式将ClosedRange类型扩展为EncodableDecodable。在Swift 5中,当ClosedRangeEncodableDecodable时,Bound已经符合EncodableDecodable,但是编译器没有给出我有一个关于冗余一致性的错误,而是挂在编译上。

修改代码以使用新的Swift 5协议一致性后,它可以很好地编译。但是,花了很长时间才将问题缩小到这个范围。在我看来,这是Swift编译器中的一个错误,因为即使在其他Mac上,编译器也挂在Playground或命令行中。

答案 1 :(得分:1)

您的项目是否包含任何第三个库?如果是这样,请尝试找出哪个已过时。尝试在没有此库的情况下构建项目,我非常确定其中一些库已经过时。您可能还需要将快速语言版本设置为旧版本。选择目标,转到“构建设置”>“ Swift语言版本”

答案 2 :(得分:1)

请删除衍生数据,

如果您在工作空间环境中,则可以转到“文件”>“工作空间设置”,对于常规项目环境,可以进入“文件”>“项目设置”。然后单击“派生数据”部分下的灰色小箭头,然后选择要删除的项目文件夹。

如果Pod不再集成并重新安装所有Pod文件。

希望这对您有用!

答案 3 :(得分:0)

禁用iCloud。

问题是由台式机和icloud之间的差异引起的!

花了24小时尝试查找工作空间在启动时会冻结的原因。