作为我使用Swift的旅程的一部分,我正在观看WWDC 2016的这段视频—“ 使用Swift开源进入服务器端 ”,并且可能是我的同事Pat提到的视频的31:36,“我经历了并创建了一个Xcode项目”。 Xcode项目的创建是为了调试Bluepic的Bluepic-Server文件夹下的服务器端代码,Bluepic是用于iOS的示例照片共享应用程序。 作为一名Swift新手,我想知道他是怎么做到的? 我开始探索各种选择,例如CMake,QT等,但没有得到我想要的东西。 注意:要快速创建,维护和监视BluePic示例,请参阅IBM Cloud Tools for Swift 在尝试Kitura( 用于 Linux(Ubuntu)上Swif t的Web框架和HTTP服务器 )时,我正在阅读Package Manager的文档,并遇到了此说明。 使用Swift快照,可以使用包管理器的支持来生成Xcode项目。 如果您的Mac上已经安装了Xcode 7.3.1或更高版本,请执行Swift快照安装步骤,最终结果应如下所示 在终端上,运行以下命令(如果尚未完成) 导出PATH = / Library / Developer / Toolchains / swift-latest.xctoolchain / usr / bin:“ $ {PATH}” 导航到终端上的BluePic-Server文件夹,然后运行以下命令以生成.XcodeProj, 迅捷包generate-xcodeproj 如果一切正常,您应该在文件夹中看到Bluepic-Server.xcodeproj文件 Vidyasagars-MacBook-Pro:Bluepic-Server VMac $ swift软件包generate-xcodeproj 克隆https://github.com/IBM-Swift/Kitura.git HEAD现在位于d643c31 IBM-Swift / Kitura#513 Changed BluePic链接 解决的版本:0.15.7 克隆https://github.com/IBM-Swift/Kitura-net.git HEAD现在位于6193ca8,通过执行更少,更长的字符转换操作来避免__CFGetConverter中的锁定瓶颈(#32) […]
在构建/编译项目时,我写了一些Xcode错误,以提醒和注意我自己,以避免将来出现这些错误。 😀 [您已被警告]这些错误解决方案不是解决问题的唯一方法。 这发生在我(和您)身上,但是解决方案可能无法解决您的问题。 如果是这样,请转到StackOverflow😀 分割错误:11 分段故障11 当我有CocoaPods依赖项时,会发生这种情况,该依赖项声明了这样的SomeType类型,当然,声明一个具有相同名称的新类型的品牌是“危险的”(在我的情况下,我声明具有相同名称的typealias)。 在得到这种类型的错误(我是一个初级开发人员,无法确定this是编译错误还是构建错误)之前,Xcode显示一条警告,通知您发生了内部错误。 看到? 在上面的错误信息中,传递JSQMessage并将其转换为JSQMessageData类型,该类型总是失败并引发错误,因为编译器从我的typealias中获取JSQMessage.Type: typealias JSQMessage = (String, String, String) -> Void 如何解决这个问题? 因为我已经声明了类型别名的名称已经被某个框架保留,所以我只重命名了类型别名。 typealias MyMessage = (String, String, String) -> Void 固定!!
从函数式编程中汲取灵感,Swift 3推出了高阶函数。 高阶函数(缩写为HOF)是将函数作为输入和/或产生函数作为输出的函数。 Swift 3引入了几个高阶函数。 本文将演示Swift 3高阶函数中的三个函数的一些易于理解的用法。 地图 降低 过滤 值得一提的是,以上所有HOF均可与Array和Dictionary一起使用。 地图 当您要对字典或数组的每个元素执行特定操作时,可以使用Swift的map函数。 在数组中,映射可以用作: var arrayOfNumbers = [1,2,3,4,5,6,7,8,9,10] 让加工数组= arrayOfNumbers.map {(num)-> Int in 返回num + 1 } 在上面的示例中,我们采用1到10的整数数组。我们的目标是使用map函数将数组中的每个数字加1。 num参数是用于每个元素的标识符,可以用任何有效的Swift标识符替换。 在上面的map方法实现中,我们正在做以下事情 我们从arrayOfNumbers中获取每个元素 我们将该数字分配给num(在第二行代码中) 我们打算为每个元素返回一个整数。 这实质上意味着我们的计算将得出一个整数。 由于我们将每个数字加1,因此结果也将是整数。 最后,在块内,我们返回递增的数字。 上面的所有四个步骤将对数组或字典中的所有n个元素进行。 一旦所有元素都被处理,新数组将被存储在processedArray中。 降低 Swift 3中的reduce函数用于将数组或字典的值减少为单个值。 让我们考虑一个示例,在该示例中我们想要获取数组中所有数字的总和。 传统的方法是在元素上循环并在变量中累加和。 var sum = 0 用于arrayOfNumbers中的num { 总和=总和+数字 } print(“ Sum is \(sum)”) […]
本日3月28日,Appleの各种OSおよびXcodeの正式アップデートが来たので,早速Xcode 8.3 ・ Swift 3.1にアップデートしてみました。スクショの通り,入れているXcodeは8.3のみで,スッキリです( ´・‿・`) 现在提供新下载–新闻和更新– Apple Developer 获取有关一系列开发,App Store和Mac App Store主题的更新,提示和操作方法信息。 developer.apple.com Mac App Store上的Xcode 阅读评论,比较客户评分,查看屏幕截图,并了解有关Xcode的更多信息。 下载Mac OS X 10.12的Xcode… itunes.apple.com ついでに,こういう改善もセットでなされました: Apple App Store Qiのレビューに対して返信できるようになりました🎉– Qiita ドキュメイトル通りで,详しくはこちらのApple公式ドキュメントに载っています:App Store上的监控评论 Swift 3.1の変更については,少し前の记事ですが,以下にまとめた内容と大差ありません。 Swift 3.1のリリースプロセスおよびそれに含まれる変更内容の绍介(前编) Build Insiderオピニオン:小野将之(5)。Swift3.1のリリースが2017年春に迫ってきた。版のSwiftを利用する… www.buildinsider.net Swift 3.1のリリースプロセスおよびそれに含まれる変更内容の绍介(后编) SwiftリポジトリのCHANGELOGとSwift Evolutionリポジトリの提案状态を见ると,Swift 3.1の开発状况が分かる。以下では12月20日时点で最新の开发… www.buildinsider.net 个人的には,こちらのジェネリクスの制限缓和が嬉しいです(・‿・`) [SR-1009]将方法添加到包含特定类型的数组– Swift 例如,如果我想激活约束内的约束:[NSLayoutConstraint],而不是编写… bugs.swift.org 公式记事も上がっています: Swift 3.1发布! Swift 3.1现已正式发布! Swift […]
Apple在Xcode 8中引入了自动代码签名功能。该功能旨在解决开发人员以前在管理证书和预配应用程序时遇到的许多问题,并使签名应用程序以及在应用程序和开发人员门户中的功能同步变得更加容易。 在WWDC 2016中,有一个关于此主题的整个会议,Xcode App Signing的新增功能。 此功能有助于节省大量时间用于供应应用程序的证书管理。 但是,由于自动代码签名功能开始使用开发证书来存档应用程序,因此这破坏了大多数构建脚本。 正如在此答案中讨论的那样,有几种解决方法。 在本文中,我们将研究如何针对需要在构建脚本中使用单独的证书的情况,切换到构建脚本中的手动代码签名。 尽管具有自动代码签名的所有优点,但是它也带来了一些危害。 自动代码签名的主要问题之一是,当您的CI脚本需要覆盖CODE_SIGN_IDENTITY ei Enterprise和App Store的不同团队构建具有不同证书的应用程序时。 可能您的构建脚本如下所示: xcodebuild -project MyAmazingApp.xcodeproj -target MyTarget干净存档-sdk iphoneos PRODUCT_BUNDLE_IDENTIFIER = edu.myamazingcompany.myamazingapp -archivePath MyArchive.xcarchive PROVISIONING_PROFILE_SPECIFIER = {Provisioning_Profile_Uuid} CODE_SIGN_IDENTITY =” 运行会在Xcode 8中给您以下错误: 检查依赖项 {目标/方案}的配置设置冲突。 {Target / Scheme}将自动签名以进行开发,但是已经手动指定了冲突的代码签名标识iPhone Distribution。 在构建设置编辑器中将代码签名标识值设置为“ iPhone Developer”,或在项目编辑器中切换为手动签名。 SDK’iOS 10.X’中的产品类型’Application’需要代码签名 如果您不熟悉xcodebuild命令,则可以通过运行以下命令来了解它: xcodebuild -help或查看xcodebuild上的Apple文档页面。 如前所述,此问题有几种解决方法。 在这里,我们将研究如何在项目中保留“自动代码签名”功能,并在调用xcodebuild命令之前将其禁用,以便我们仍然可以手动指定代码签名证书并覆盖默认值。 首先,让我们看看Xcode如何指示是否使用自动代码签名设置了目标。 正如此处讨论的那样, ProvisioningStyle是用于标识目标是否应使用自动代码签名的属性名称,具体取决于其值Atuomatic / Manual […]
Xcode 8.2,界面构建器,情节提要,Swift 嗨,我想分享一些视图提示和技巧,如果您希望在界面生成器中放置设计,可以使用这些技巧。 媒体库 在“实用程序”部分(右边的一个)中,有“库”部分,其中有我们一直使用的“对象库”,在它的右侧,您可以看到“媒体”库,在该库中您可以更快地找到图像并进行拖放他们进入您的意见。 您的图像不应该出现在“资产目录”中,但是我注意到无法识别1x图像。 本地化锁 允许您查看部分或全部视图属性。 方便使用,避免意外修改,例如在布局或字符串上。 您可以从“ 编辑”菜单->“本地化锁定”锁定整个情节提要,也可以从Identity Inspector的“文档”下 锁定特定的视图。 嵌入/取消嵌入并安排 您可能要在UIView / ScrollView / stackView下将几个视图捆绑在一起,而不是先拖动新视图然后将其拖动到其中,而是可以选择它们,然后从edit-> Embed中选择一个选项UIView / ScrollView / stackView,您可以将场景嵌入到UINavigationController / UITabbarController中,除非它是Tab Bar Controller,否则它是导航控制器,只能嵌入Tab Bar Controller中。 另一种方法是选择包含的视图, 然后从编辑器中选择“未嵌入 ”。 请注意,自动布局约束将被清除。 排列 (向前,向后,向后和向前发送):选择一个视图,然后从edit-> arrange中更改其在同级视图(相同级别)之间的顺序。 重构到情节提要 您可以选择一个或多个场景,然后编辑->重构到情节提要,然后会要求您命名情节提要,并且您将拥有一个包含所选场景的新情节提要文件。 急救人员 这是一组可以应用于第一响应者的函数,例如TextField 。 已经定义了一些功能,例如undo,selectAll,copy等。 另外,您可以创建自己的功能。 您所需要做的就是像往常一样(但现在与First Responder连接)在情节提要中连接UIControls动作。 调色板 这是非常有用的功能,因为您将在项目中冗余使用某些颜色集,因此创建易于访问的调色板会有所帮助。 您可以从这里查看方法。 设计和检查 将UIView子类标记为@IBDesignable将告诉接口构建器在其属性发生更改时刷新视图。 尽管在更复杂的场景和更大的情节提要中,此功能可能会使编译器感到痛苦,并且您可能最终将其关闭😀。 将属性标记为Inspectable将使它显示在Attributes Inspector中,并允许您从界面构建器中编辑定制属性。 同时使用这两个功能可能非常适合原型制作。 […]
在Flatiron School的iOS沉浸式课程的第二周,我几乎快要结束了。 当涉及到我的环境时,我一直认为自己是一个悠闲的家伙。 但是,在纽约待了一个多星期之后,我意识到我肯定是100%认证的整齐怪胎! 因此,当我在Xcode的Interface Builder: Outlet Collections中工作时遇到一个有趣的选择时,我的想象力被激起了,这并不奇怪。 到目前为止,我们主要使用IBOutlet构建了noob应用程序,这已经足以满足视图中相对较少数量的对象的需求。 但是,在第一天创建Tic Tac Toe应用程序时,我的朋友Will Robinson建议我们使用插座集合来管理众多按钮标签和操作。 插座集合使对象的状态更改(例如颜色,文本内容,隐藏状态等)更易于编码。 例如,在我合作的TicTacToe应用程序中,为网格的每个部分提供9个单独的按钮比为网格的每个部分提供9个单独的按钮要干净得多。 我们今天不会制作TicTacToe。 取而代之的是,我们将把一些标签放在一起作为Outlet Collection进行操作,以便快速分享它们的潜力。 首先,我们需要创建一个插座集合。 如果您想继续使用Xcode,建议您至少在两行中放置一些标签,因为这将有助于说明插座集合创建其初始顺序的方式。 即,集合的初始项目顺序是您添加它们的顺序。 因此,一旦在多行中创建了标签,请确定将标签添加到集合中的顺序。 我将从左到右,从上到下。 Ctrl将第一个标签拖动到View Controller.swift中。 系统将提示您选择一些选项并命名您的插座。 首先,确保选择连接类型为“ 插座集合”。 这将允许您向收藏夹添加其他标签。 创建您的Outlet Collection后,您将要开始将其余标签添加到该Collection中。 为此,您可以将集合的IBOutlet旁边的连接圈一次拖到情节提要中的每个标签上。 同样,我从左到右,从上到下进行了此操作。 ( 注意:在Swift 3.0中,UILabel集合可以访问类似数组的方法,因此可以使用.remove和.insert等方法来访问和操纵成员标签的位置。想想所有的程序化组织能够做到!) 现在,我们将如何控制这些标签? 简单! 由于我们已按照特定顺序将它们添加到集合中,因此我们可以根据该顺序引用它们! 例如,可以根据您在标签中放置标签的顺序(通过labelGroup [0] = Label1,labelGroup [1] = Label2,依此类推)通过labelGroup [index]来操作我的标签。 您可以通过放置几个打印命令并在ViewDidLoad()中设置labelGroup [0] =“ Hi!”来验证这一点。 现在,当我运行此应用程序时,我可以看到在日志中打印了可选字符串: ( 注意:请注意,我的日志仅显示打印行。如果您要这样做,请执行以下操作: 单击以下菜单: […]
以及其他插件… Xcode 8.1在MacBook Pro和Touch Bar启动的“ Hello Again”事件之后发布。 我的同事问他是否可以使用XVim,并且显然如果没有Vim模式就无法生存。 同时,我非常渴望在演示项目中试用Touch Bar功能。 因此,我决心对其进行测试。 1)从存档而不是Mac App Store下载 最初,我通过Mac App Store以一般方式更新Xcode。 然后,我使用了工具MakeXcodeGr8Again,但该工具无法正常工作。 当我将Xcode拖到工具时,该过程中断了。 在对此问题进行了一些来回讨论之后,我尝试从下载存档中下载Xcode 8.1。 这次可以了。 该图像说明了两个Xcode。 尽管它们具有相同的内部版本号,但是它们具有不同的文件大小并创建日期。 2)将兼容性UUID添加到插件 启动重新签名的Xcode之后,XVim仍然无法正常工作。 遗漏了一些东西。 每个Xcode版本都有其自己的UUID。 为了使插件能够识别兼容性,我们应该确保UUID在Info.plist中可用。 可以在终端中运行此命令。 find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add `defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID` 为了进一步了解,这基本上是获取最新Xcode的UUID,并将其附加到每个插件的Info.plist中。 这将获取位于指定路径中的最新Xcode的UUID。 `defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID` […]
警告部分 我想分享在迁移过程中发现并修复的编译器错误。 原始代码:OC。 Xcode转换:XC(当Xcode自动将代码从swift 2转换为swift 3时) // OC Swift 2 让deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle(.Destructive,title:“ Remove”) {[弱自我]动作,indexPath in // XC 让deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle(rawValue:Int)!,标题:“ Remove”) {[弱自我]动作,indexPath in // Swift 3 让deleteAction = UITableViewRowAction(style: .destructive,title:“ Remove” ){[弱自我]动作,indexPath在 [String:(Format ,NSCache ,DiskCache)]→[String:(Format ,NSCache,DiskCache)] //迅速2 var formats:[String:(Format , NSCache ,DiskCache)] = [:] // XC var formats:[String:(Format , NSCache ,DiskCache)] = […]
编译错误部分 解决此警告的一种方法是将@discardableResult添加到函数的声明中 //迅速2 扩展UIView { func addHighlightedAction(_ handler:()-> Void)-> HighlightedAction { 返回HighlightedAction(view:self,handler:handler)} } buttonView.addHighlightedAction {…} ——————————————- ——————– // Swift 3 扩展UIView { @discardableResult func addHighlightedAction(_ handler:@escaping()-> Void)-> HighlightedAction { 返回HighlightedAction(view:self,handler:handler)} } buttonView.addHighlightedAction {…} 另一种方法是在函数前面使用“ _ =” _ = imageBadge.autoAlignAxisToSuperviewAxis(…) 在String为nil的情况下添加默认值 //迅速2 print(“无法将\(tag.label)添加到空行。”)// Swift 3 print(“无法将\( tag.label ??“” )添加到空行。” //迅速2 让json =尝试JSON(数据:download.receivedData!),如果json == nil {..} —————————- […]