使用Legacy Swift语言版本 - Xcode 8.2

时间:2016-12-13 10:33:30

标签: ios xcode swift3 xcode8.2

更新到Xcode 8.2后,编译器会为我的App目标抛出一个错误:

  

“使用Legacy Swift语言版本”(SWIFT_VERSION)需要为使用Swift的目标正确配置。使用[编辑>转换> To Current Swift Syntax ...]菜单选择Swift版本或使用Build Settings编辑器直接配置构建设置。

但是在我拥有的所有目标中都设置为No。试图删除派生数据,清理项目目录,重新启动Xcode。什么都没有帮助。有人想出来吗?

//已编辑

只是为了确定:我已将所有目标Use Legacy Swift Language Version设置为No,并且在Xcode 8.1中编译时项目工作正常。更新到Xcode 8.2后它无效。

//编辑21.12。

此问题已在Xcode 8.2.1中修复

9 个答案:

答案 0 :(得分:32)

找到解决方法。我在项目中浏览了每个目标(和项目设置,以及项目和目标中的项目设置),切换“使用Legacy Swift语言版本”从“”到“”并返回“”。然后该项目再次建成。

enter image description here

答案 1 :(得分:4)

已修复Xcode 8.2.1

以下是changelog of Xcode 8.2.1

的完整性副本
  

夫特

     

已解决的问题

     
      
  • 修复了可能导致构建项目失败的问题,并显示错误消息“"使用Legacy Swift语言版本"在使用受支持的Swift版本时,需要为使用Swift的目标正确配置(SWIFT_VERSION)。 (29667880)
  •   
  • 当活动方案不使用Swift 2.3代码引用目标时,Xcode不再警告使用弃用的Swift 2.3代码。 (29671741)
  •   

答案 2 :(得分:4)

我得到了同样的错误。我试图搜索“使用Legacy Swift语言版本”,但没找到。 我正在使用Xcode 8.3.3 经过太多的冲浪和解决后,我找到了这个解决方案,这对我有用。

Follow these steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

希望这对你有用。

答案 3 :(得分:3)

关闭Xcode并在您选择的文本编辑器中打开相应的project.pbxproj

SWIFT_VERSION = 3.0.1;替换为所有目标的SWIFT_VERSION = 3.0;

重新打开Xcode。

答案 4 :(得分:3)

这是唯一对我有用的东西......

有关pod的错误。基本上我们需要启用“Legacy Swift Language”。选择您的pod框架(通过在错误导航器中单击它),然后在Build Settings下找到“Use Legacy Swift Language Version”

enter image description here

将其设置为“是”。然后“构建&再次运行以测试它。

查看此帖子:http://rebeloper.com/downgrade-swift-3-swift-2-3-xcode-8/

答案 5 :(得分:1)

好吧,我终于搞清楚了。我已删除项目并再次克隆它,重新启动Xcode,运行 <?php ob_start(); require('config.php'); session_start(); $id = $_SESSION['user']; // if session is not set this will redirect to login page if( !isset($_SESSION['user']) ) { $buttonlog = 'Login'; $smglog = 'Log nu snel in!'; }if(isset($_SESSION['user'])) { $smglog = ' Logout'; $buttonlog = ' Mijn account'; } // select loggedin users detail $sql = mysql_query("SELECT * FROM `userlogin` WHERE `id` = '$id'"); $userRow = mysql_fetch_array($sql); $sql1 = mysql_query("SELECT * FROM `comments`"); $userRow1 = mysql_fetch_array($sql1); ?> <?php require('includes/config.php'); $stmt = $db->prepare('SELECT postID, postTitle, postCont, postDate, imgBackground, imgNewspost FROM blog_posts WHERE postID = :postID'); $stmt->execute(array(':postID' => $_GET['id'])); $row = $stmt->fetch(); //if post does not exists redirect user. if($row['postID'] == ''){ header('Location: ./'); exit; } ?> <?php function setComments(){ if(isset($_POST['commentSubmit'])){ $id = $_POST['id']; $username = $_POST['username']; $date = $_POST['date']; $message = $_POST['message']; mysql_query("INSERT INTO `comments` (id, username, date, message) VALUES ('$id','$username', '$date', '$message')"); } } ?> <?php function deleteComments(){ if(isset($_POST['DeleteComment'])){ $id = $_POST['id']; mysql_query("DELETE FROM `comments` WHERE `comments`.`id` = '$id'"); } } ?> <?php if (isset($_SESSION['user'])){ echo "<form method='POST' action='".setComments()."'> <input type='hidden' name='id' value=''> <input type='hidden' name='username' value='".$_SESSION['user']."'> <input type='hidden' name='date' value='".date('Y-m-d H:i:s')."'> <textarea name='message'> </textarea> <br> <input style='' type='submit' name='commentSubmit' value='REAGEER'> </form>"; }else{ echo " Log in om te reageren"; } ?> </div> <div class="reacties"><br></div> <?php $sql = mysql_query("SELECT * FROM `comments`"); while ($row = mysql_fetch_assoc($sql)){ $id= $row['username']; $sql2 = mysql_query("SELECT * FROM `userlogin` WHERE `id` = '$id'"); if ($row2 = mysql_fetch_assoc($sql2)){ echo "<div class='commentsDiv'>"; echo "<img style='margin: 5px; left: -25px; width: 100px; height: 100px; border: 1px black solid;position: relative; display: inline;'src='".$row2['image']."'>"; echo '<p style="color: #b73a09;font-size: 16px; font-weight: bold; top: 120px; left: 0px; display: inline; position: absolute;"> '.$row2['uname'].'</p>'; echo '<p style="color: #44444; font-size: 10px; left: 5px; top: -10px; display: inline; position: absolute;"> '.$row['date'].'</p>'; echo '<p style="font-family: Poppins, sans-serif; color: #44444; text-align: justify; padding-left: 150px; top: -125px; position: relative;"> '.nl2br($row['message']); echo ""; if(isset($_SESSION['user'])){ if($_SESSION['user'] == $row2['id']){ echo "<form class='commentDelete' method='POST' action='".deleteComments()."'> <input type='hidden' name='id' value='".$row['id']."'> <button name='DeleteComment'>Delete</button> </form> <form class='commentEdit' method='POST' action='editComments.php'> <input type='hidden' name='id' value='".$row['id']."'> <input type='hidden' name='username' value='".$row['username']."'> <input type='hidden' name='date' value='".$row['date']."'> <input type='hidden' name='message' value='".$row['message']."'> <button>Edit</button> </form>"; }else { echo "<form class='commentEdit' method='POST' action='replycomment.php'> <input type='hidden' name='id' value='".$row['id']."'> <button type=''>Reply</button> </form>"; } } else{ echo "<p class='commentMessage'> Je moet inglogd zijn om te reageren! </p>"; } echo "</div>"; } } ?> pod repo update并且它有效。我不知道为什么。

答案 6 :(得分:0)

这对我们不起作用:(回到Xcode 8.1是最好的,直到Apple QA发布之前他们的东西。

如果这里的任何安慰都是我们尝试的事情并且让我们非常接近。我们陷入了清洁失败:

rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache

rm -rf ~/Library/Preferences/com.apple.Xcode.plist

重新启动Xcode并按住option

进行深度清理

摆脱了清洁失败。

将此添加到您的pod脚本

post_install do |installer|

installer.pods_project.targets.each do |target|

target.build_configurations.each do |config|

config.build_settings['SWIFT_VERSION'] = '3.0'

end

end

end

这是让所有pod符合3.0的方法,我们实际上已经建立了它,但是在编译结束时我们遇到了这个错误:

“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.

我们如何更改工作区以使所有项目符合swift 3.0?那个设置在哪里?

答案 7 :(得分:0)

事实证明,Apple决定引用pbxprojec文件中尚不存在的swift语言版本。他们硬编码3.0.1,并通过手动编辑pbx文件中的sudo XML回到3.0,一切都工作了。 Apple在发布8.2之前显然忽略了一些简单的QA工作。

这也可以解释为什么在构建设置中的遗留切换为某些人工作。

答案 8 :(得分:0)

我将我的应用程序的部分内容(Obj C和Swift)转换为框架时出现了同样的错误,但在我的情况下,没有设置Build Settings下的“Swift语言版本”。我把它设置为Swift 3(唯一选项),错误就消失了。