Tag: Xcode 9

XCode 9和BitBucket

您必须爱BitBucket才能获得那些免费的私人仓库。 本指南旨在通过Xcode9轻松实现BitBucket源代码控制。 好吧,这就是我的做法。 比特桶 首先创建您的BitBucket帐户或登录名。 然后用一个聪明的名字创建一个新的仓库。 您应该进入此屏幕,在其中单击“我有一个现有项目”。 应该出现一些行: git remote add origin https:// [用户名] @ bitbucket.org / [用户名] / [RepoName] .git git push -u原始主机 您将要保存该行: https:// [UserName] @ bitbucket.org / [UserName] / [RepoName] .git 现在到Xcode Xcode->首选项->帐户->添加您的github帐户。 (不确定是否有必要,可能不是) 在项目导航器区域中,单击该源代码控制按钮 然后点击这个小家伙 单击“添加现有的遥控器…”,这应该会弹出这个小家伙。 将我们从上方保存的仓库命名为Location 。 现在,您可以使用Xcode 9中内置的源代码控制! 恭喜。 简单。 快点 做完了

Xcode技巧与窍门(高效)

我们总是急于至少按时完成工作。 为此,我们所有人都在使用某种技巧。 如果您不这样做,那就开始吧, Be product 。 使用的符号:- ⌘=命令键 ⌃ =控制键 ⌥=选项(alt)键 ⇧= Shift键 ↩=返回键 故事板重构 将大型用户界面分成多个情节提要板的好处是可以避免源代码控制冲突。 缺点是您随后无法在Interface Story Builder中的不同Storyboard之间创建脚本。 脚步:- 选择要重构的场景。 从Editor菜单中选择“ Refactor to Storyboard然后在出现提示时输入新的情节提要的名称并保存。 界面生成器将切换为显示给您新创建的情节提要,其中应包含先前选择的场景和场景。 如果切换回主故事板,您将看到“设置”场景已替换为代表故事板参考的占位符。 查看层次结构 使用Control + Shift +单击视图来显示视图层次结构。 锁定UI元素以防止其他更改 如果要防止在开发模块中进行更改,则可以锁定元素或ViewController,以使您的共同开发人员无法更改ViewController的该视图的属性。 当然,他可以解锁该属性并对其进行更改。 脚步:- 选择要锁定的View / ViewController。 打开身份检查器 。 在“文档”部分中打开lock属性的下拉列表。 选择合适的选项。 现在,如果您更改视图的位置,您将在屏幕上看到一个锁定图标。 插座系列 插座集合是IBOutlet的数组。 我们可以在一个集合中存储不止一种相同类型的IBOutlet,以便稍后可以使用它一次应用相同类型的属性。 我们也可以像普通数组一样使用索引访问特定的出口。 脚步:- 在情节提要中选择ViewController。 使用⌥+⌘+↩打开Assistance Editor。 ⌃ +拖动插座。 将“连接”更改为“ […]

iOS Swift 4实时聊天功能。 火力基地

参考来源:https://www.raywenderlich.com/140836/firebase-tutorial-real-time-chat-2 Github项目:https://github.com/vin20777/Firebase-Tutorial-Real-time-Chat 首要作业:1。 请先安装Cocoapods并在目录下pod安装指令2.用Google帐号申请Firebase专案权限3.获取GoogleService-Info.plist并放置于专案中4.换上自己的存储URL 由于教程里的范例有JSQMessage已不再支持,Swift仍未更新至4,因此放上Swift 4消除警告修复版(未来也会变成legacy吧……)。 一般的架构如果要建立聊天室类型的APP,都要有前端与本身的技术支持,但是Firebase强大的整合了常用的功能,在聊天室这个情境中,与普通呼叫API不相同的点在于A君如何知道B君发送了一条消息,并且对话记录的记载,这些都在Firebase的SDK完美的封装提供给您使用了,有兴趣的可以谷歌相关技术。 如果都没碰过Firebase相关的开发者也不用太担心,可以先去看看Raywenderlich.com其他相关的Firebase教程,这个网站真的是佛心来着,大部分基础教程都可以免费阅读且记载详细又好玩喔! 本篇会遵循教学的流程来走,实际的实作或解释还是需配合教程来走喔! First Step聊天室当然是大家都可以用的啊(至少是下载我的APP嘿!),但是App仍必须识别此用户是谁,因此使用Firebase的匿名登录模式,记录用户的唯一识别码。 TableView分为两个部分,一个能够让你创建聊天室,另一个则是显示当前所有聊天室的列表。 第三步Firebase封装为观察者模式去监听实时频道(频道)是否有增删权,如有异动则调用私人功能seeChannels()或者当房主自己创立一个频道func createChannel(_ sender:AnyObject)与Firebase互动。 第四步JSQMessageViewController是一个聊天室页面的开源框架,很遗憾最近作者在2017年7月16日宣布停止维护,仍然可以使用它但是不会再去修正错误或增加功能,它通过Collection视图去当底然后封装成非常容易使用的类,我认为目前有聊天室功能的iOS应用都是参考或直接使用它再做变化。 第五步利用协议客制化好UI部分后,剩下的就是与第三步类似的文字Firebase同步问题啰,观察数据库的结构是否有异动去更新画面。 Last迄今为止已经是一个有模有样的两人文字聊天室了,可参考我的Github做搜寻,测试的话就使用真机一台和模拟器互相操作吧!如果你想要a。 发现对方是否是输入中b。 传输照片(使用Firebase存储),会发现做法都是类似的步骤:获取Firebase沟通方式->上传更新资料库或下载同步装置端资讯-> UI显示,基本上现在的聊天室都有五花八门的功能,毕竟想赚大钱不是这么容易,你可以去设想更多的功能与之结合,大家伙就4这样啰,快去创立自己的聊天室吧!

XCode代码段nasılayarlanır?

Benimkeşfetmemuzunsürdüğünden,比尔哈萨大城堡 片段nedir吗? 片段kod yazarkenişimiziinanılmazkolaylaştıranbir IDE eklentisi。 BirtakımIDE’ler iletümleşikgelmemesine档案XCode bu konudabaşarılıbirişçıkartmış。 ÖrneğinC ++’daaşağıdakikodu yazmaktansıkıldıysanıztam olarakdoğruyerdesiniz。 #include 使用命名空间std; int main(){ } Nasılkullanılır? Bu ekrana geldikten sonrayapmamızgerekençokbasit kodyazdığımızyerdekısayolyapmakistediğimizkoduseçipCMDtuşunabasılıtutaraksnippet’larınolduğuyeresürüklemek。 Çıkanekranda; 标题:Sizinanlayabileceğinizbirbaşlık。 完成捷径:Kod yazarken incyazdığımdaaşağıdakitümkodlarıyazıyor。 您可以在“收入”中找到更多的信息。 Geldikpüfnoktasına。 Eğerki kodunuzdabirtakımdeğişkenlervarsa yani kodu她的yazdığınızdaaynıolmayan fakat koduniçindebulunan yerler var ise,ki fordöngüsübunaörnekolabilir,onlariçin。 Buözelliksayesindearkasıgri olan alanlararasındayazarken TAB ilegeçişyapabilecek,dahahızlıkod yazabileceksiniz。 AşağıdakiGIF’ler konunun daha iyianlaşılabilmesiiçinbaşkabir makaledenalıntıdır。 Kaynakaşağıdabelirtilmiştir。 https://medium.com/@abhimuralidharan/ios-tips-creating-custom-code-snippets-in-xcode-d91facf5e242

提示:将代码从Swift 3升级到Swift 4?

在转换代码之前执行此操作 提示#1 如果您的viewcontroller符合任何协议,则必须将其与类定义一起声明,以便Xcode可以将协议方法转换为相应的swift版本。 例如,我们可以直接从Storyboard分配UITableView / UICollectionView Delegate和Datasource,通常不在类定义中声明它,而直接编写协议方法,其他委托如UISearchBar,UITextView或UITextField就是这种情况。 只要确保您的ViewController包含声明 例如 MyViewController类:UIViewController,UITableViewDelegate,UITableViewDataSource 为什么要这样做? Xcode可能不会将已经实现的方法定义转换为最新的方法定义,因为它可能会将其视为您的本地函数。 您需要通知Xcode您的ViewController符合协议XYZ,因此Xcode也会更新您的方法定义,或者至少会给您相应的警告或错误 结果呢? 如果您没有在UnitTesting中涵盖所有代码,或者尚未实现UITesting来彻底测试应用程序,则很有可能在进行手动测试时会丢失部分代码。 这可能会导致崩溃或不当行为。 这也将确保Swift的未来版本在进行转换时会自动转换您的委托方法。 更好的方法(如果您仍然不遵循) 始终为协议实现创建类的扩展 例如 扩展MyViewController:UICollectionViewDelegate,UICollectionViewDataSource { func numberOfSections(在collectionView:UICollectionView中)-> Int { 返回1 } func collectionView(_ collectionView:UICollectionView,numberOfItemsInSection部分:Int)-> Int { 返回10 } func collectionView(_ collectionView:UICollectionView,cellForItemAt indexPath:IndexPath)-> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier:“ reuseIdentifier”,用于:indexPath) 返回单元 } func collectionView(_ collectionView:UICollectionView,didSelectItemAt indexPath:IndexPath){ } 提示2 如果您的代码是Swift和Objective-C的混合体,则Swift […]

减少应用启动时间

你好,世界!!! 这是我的第一个故事。 我想分享一下我在优化应用启动时间方面的经验。 当我开始时,我想到的第一个问题是 App launch time 多少? 答案是,完成应用程序启动序列所花费的时间称为应用程序启动时间。 (我很确定,通过该链接并了解应用启动顺序将花费一些时间) 最简单的答案是,在您的代码(在application(_:didFinishLaunchingWithOptions:)内部application(_:didFinishLaunchingWithOptions:) )开始运行之前,启动应用程序所花费的时间称为应用程序的启动时间 下一个问题是,如何衡量应用程序的启动时间? 苹果公司已经考虑了这个问题,并保留让开发人员对其进行评估的条件。 它有两个步骤。 首先是: 切换到释放模式(参见图1)。 您需要添加名称为DYLD_PRINT_STATISTICS且值为1环境变量(请参DYLD_PRINT_STATISTICS 2)。 现在,启动应用程序时,您可以在控制台部分的顶部看到日志。 有两种启动方式。 冷启动和热启动。 通常,冷 启动更重要。 衡量冷启动更重要的原因是用户重启手机后启动应用程序,或者很长时间以来第一次启动应用程序,这才是您真正希望它能立即启动的原因。 热启动是一种应用程序,其中的应用程序已经在内存中,这是因为它已经被启动并已退出,并且仍然位于内核中 因此,当我检查冷启动时,观察到以下内容: 主时间总计:675.22毫秒 dylib加载时间:535.96毫秒 重新设置/绑定时间:50.58毫秒 ObjC建立时间:35.27毫秒 其他初始化:X毫秒 苹果表示,应用程序启动时间应在400毫秒左右。 显然,这超出了预期。 我们可以看到加载dylib占用了最大的部分。 这是加载依赖关系所花费的时间,我现在可以在我的项目中看到30个pod和依赖关系。 问题是如何减少此dylib的加载时间? 第一步是避免使用库,但是随着开发的进行,库的数量开始增加。 因此,采用预防性方法,请尝试使用具有快速代码的库(考虑到您的项目处于快速状态)。 其次,对于所有库,请进行构建设置>> Mach-O Type并将其值设置为static library (请参见图3)。 当您将其设置为static library 文件在构建时链接。 代码被复制到可执行文件中。 程序中未引用的库中的代码将被删除。 仅具有静态库的程序在运行时没有任何依赖性。 这是更改后我的应用程序的日志: 主时间总计:430.53毫秒 dylib加载时间:333.09毫秒 重新设置/绑定时间:26.39毫秒 ObjC建立时间:20.72毫秒 […]

Swift 4:桥接可编码,JSON和[String:Any]

如果您像大多数Swift开发人员一样,您会欣喜若狂,我们最终对如何在Swift中处理JSON有了明确的答案。 Codable实际上为您免费提供了自定义数据结构的序列化/反序列化。 它开箱即用地支持JSON和Plist,并且它易于扩展的体系结构意味着在接下来的几个月中,我们将在GitHub上看到很多其他选择-我在为您提供YAML。 但是,尽管Swift需要花一些时间为我们提供标准,但社区的其他成员仍然必须与基于JSON的API进行交互。 这导致了各种各样的库和策略。 在大多数情况下, Codable现在提供了这些其他解决方案的批发替代品。 进行切换应尽量避免麻烦,并减少代码行和依赖性。 那是双赢。 想要让我们通过处理JSON序列化/反序列化来提供更多帮助的库的情况有点令人h目结舌。 PubNub是这种方法的一个示例。 这些库希望与Any (通常表示[String: Any]或[Any] )进行交互。 我敢肯定,随着时间的Codable ,这些库中的大部分将包含Codable ,但是现在应该如何与它们集成? Codable为我们提供了一种将自定义对象映射到Data ,因此,如果我们有一种将Data映射到[String: Any]或[Any]那么我们就可以了! 幸运的是, JSONSerialization做到这一点。 因此,一个简单的解决方案是使用JSONSerializtion进行额外的编码/解码,以生成这些库期望的数据类型。 对JSONEcoder和JSONDecoder的扩展很自然地放置了此逻辑,因为您仍然可以访问诸如dateEncodingStrategy类的dateEncodingStrategy 。 结果看起来像这样: 尽管这种方法肯定不会获得任何效率方面的奖励,但它为我们现在需要与之交互的API和光荣的Codable未来之间架起了一座简单的桥梁。

XCode iOS升级了–第2部分

“在节目主持人联合会上,司法保护法庭不予受理。” MacOS可以在Mac OS上使用通用工具,而Mac OS可以在Mac OS上使用任何其他工具。 Hablemos de manerarápidaque es PlayGround:苹果游戏区“游乐场” con fin de queniñosy desarrolladores初中aprendan la sintaxis del lenguaje Swift sin ser abrumados por interfacegráficaque cese las ganas de aguider,porque sinceramente condo档案故事板salgan algunos cuantos错误,fin,游乐场,惯性,惯性,我从专业人士那里获得经验,编程,ejemplo:declaraciones,funciones yimpresiónde resultados,sinmásasíes como los ingenieros de apple supusieron Playgrounds,un patio de juegos con esteroides y de verdad yaveránpor que es que […]

提醒Swift 4

一键式 class ViewController: UIViewController { @IBAction func showAlertButtonTapped(_ sender: UIButton) { // create the alert let alert = UIAlertController(title: “My Title”, message: “This is my message.”, preferredStyle: UIAlertControllerStyle.alert) // add an action (button) alert.addAction(UIAlertAction(title: “OK”, style: UIAlertActionStyle.default, handler: nil)) // show the alert self.present(alert, animated: true, completion: nil) } } 两个按钮 class ViewController: UIViewController { […]

如何轻松地在Xcode中更改文件标题文本

您是否曾经想过在每次创建自己的文件时自动创建自己的标题文本? Xcode帮助页面已经说明了如何执行此操作。 但是对于新程序员来说,那里的信息太多了。 因此,如果您感到困惑,请遵循此简单教程! 你需要什么 我们需要两件事: 具有以下名称的plist文件: IDETemplateMacros.plist。 我们将创建这个。 将文件放在上方的位置。 创建plist文件 打开Xcode。 创建新文件,快捷方式为Command +N。 向下滚动到资源文件,然后选择属性列表类型文件。 单击“下一步”,并提供文件名IDETemplateMacros.plist。 现在将其保存在桌面上,以便我们轻松找到它。 稍后我们将把这个文件移到适当的位置。 自定义文本宏 创建plist文件后,就可以修改plist文件并为标题文本添加宏键。 双击打开您创建的plist文件。 我更喜欢使用Xcode作为plist编辑器。 突出显示根行,然后单击+号。 键入FILEHEADER作为键名,并确保类型为String。 FILEHEADER是一个文本宏,它引用放置在Xcode中每个新文件顶部的文本。 如果您想更多地了解其他宏,Xcode帮助将列出所有宏。 这是有趣的部分,在文本编辑器中创建自定义标题文本。 我已经使用TextEdit制作了自己的自定义标头,如下所示,您可以编写任何内容,并使其随心所欲: 恭喜你! 您已经制作了自己的标题文本,可以使用了。 选择放置plist文件的位置 现在,我们需要将此文件放到Xcode读取宏的地方。 Xcode将在以下位置查找文本宏: 项目用户数据: .xcodeproj / xcuserdata / [用户名] .xcuserdatad / 项目共享数据: .xcodeproj / xcshareddata / IDETemplateMacros.plist 工作区用户数据: .xcworkspace / xcuserdata / [用户名] .xcuserdatad / […]