Tag: swift

将设置添加到您的iOS应用

每个具有“设置”捆绑软件的应用程序都至少有一个首选项页面,称为“ 首页” 。 如果您的应用程序只有几个首选项,则主页可能是您唯一需要的一个。 但是,如果首选项的数量太大而无法容纳在主页上,则可以创建链接该主页或其他子页面的子页面。 可以创建的子页面数量没有具体限制,但是您应努力使首选项保持尽可能简单和易于浏览。 设置捆绑包的名称为Settings.bundle ,位于应用程序捆绑包的顶级目录中。 该捆绑软件包含一个或多个描述首选项各个页面的“设置”页面文件。 它还可能包括显示您的首选项所需的其他支持文件,例如图像或本地化字符串。 您可以本地化Info.plist文件并以所需的语言显示设置。请在官方文档中阅读更多内容。 添加设置包 要将设置包添加到您的Xcode项目中: 选择“文件>新建>新建文件”。 在iOS下,选择“资源”,然后选择“设置捆绑包”模板。 将文件命名为Settings.bundle 。

每个iOS开发人员都应该了解的5个顶级iOS开源库

1. TextFieldEffect 您不觉得标准的UITextField有点无聊吗? 我也是—所以向TextFieldEffects打个招呼! 我不会写太多,我仅向您展示一些示例,该库可以做什么: 是的,这些是简单的嵌入式控制器。 您甚至可以从情节提要中的IBDesignables使用! CoCoapods: pod’TextFieldEffects’ 2. MGSwipeTableCell MGSwipeTableCell是易于使用的UITableViewCell子类,它允许显示具有各种转换的可滑动按钮。 该库与创建UITableViewCell的所有不同方式兼容:系统预定义样式,以编程方式创建的单元格,从xib加载的单元格和情节提要中的原型单元格。 您可以根据需要使用自动布局。 椰子足 Pod’MGSwipeTableCell’ 3. Almofire Alamofire是用Swift编写的HTTP网络库。 它利用NSURLSession和Foundation URL loading System在便捷的Swift界面中提供一流的联网功能。 Alamofire入门很容易。 发出GET请求的方法如下 椰子足 豆荚“ Almofire” 4.变色龙 如果您正在阅读本文,那么您是比设计者更好的程序员的可能性非常高。 这是给你的。 椰子足 Pod“变色龙” 5. SVProgressHUD 此图像已正确加载,请勿等待更长的时间,也不要刷新页面。 这就是SVProgressHUD在您的应用程序中的样子。 如果您需要自定义等待指示器,则这里有(可能是最好的)指示器。 椰子足 Pod’SVProgressHuD’

Swift基础知识:制作简单的iOS应用程序所需的条件

随着手机数量的增加,对应用程序开发人员的需求逐年增加。 Swift是创建应用程序最常用的语言之一。 “ Swift是针对macOS,iOS,watchOS和tvOS的强大而直观的编程语言。 编写Swift代码是交互式且有趣的,语法简洁而又富有表现力,并且Swift包含开发人员喜欢的现代功能。 Swift代码在设计上是安全的,但也可以生成运行速度极快的软件” 现在一切都应该运行,您应该可以使用该应用了。 万一遇到任何错误,请在Stack Overflow上查找它们。 到应用的代码: 将立即更新 谢谢,希望您喜欢。

Heroku上Kitura入门

Kitura是IBM创建的Web框架。 这是一个非常简单的框架,与Sinatra,Express,Lumen和Flask之类的框架有很多相似之处。 它是用Swift编写的,因此在使用它方面有很多吸引力,因为您可以开始考虑使用相同的语言编写客户端代码(假设您正在为iOS和OS X进行构建)和服务器端代码。 这不是我们第一次看到这种东西。 在基于浏览器的应用程序领域,借助NodeJS之类的工具,您可以在浏览器和服务器上编写Javascript。 在Android上,由于使用Java,您可以与您的后端和应用程序共享代码(这在Java领域绝对是一个巨大的胜利)。 就个人而言,随着Swift 3的发布,我开始对Swift作为服务器端语言非常感兴趣,该版本捆绑在Swift Package Manager(SPM)和Foundation的本机端口中。 对于那些不了解的人来说,Foundation是为Objective-C和Swift带来很多好处的关键框架之一。 由于原始的Foundation库是用Objective-C编写的,因此Linux上的Swift尚无法使用它,但是现在人们已经在努力在Swift中重新实现Foundation本身,并且它开始取得成果。 设定 迅速 为了便于撰写本文,我假设您正在OS X上运行,在这种情况下,您将要跳到App Store并获取Xcode8。如果您不是App Store的粉丝,那么它也是可通过Apple Developer Portal直接下载。 在Linux上进行设置有点麻烦,但是Swift网站上为您概述了一些安装步骤。 安装完所有内容后,您将可以运行: $ swift-版本 这应该显示您当前已安装的Swift版本。 对于本指南,我假设您正在运行Swift 3.0。 Heroku 接下来,您将要抓住Heroku工具带。 这将为您的计算机设置所有内容,我假设您已经在Heroku中创建了一个帐户,并且此时已使用工具带登录。 不用担心,您现在还不需要创建任何应用。 建立 现在您已经设置好开发环境,我们可以开始实际构建应用程序了。 首先,您将要为您的应用程序创建项目结构。 Swift Package Manager(SPM)在这里为您提供帮助: $ mkdir myFirstKituraApp $ cd myFirstKituraApp $ swift软件包init –type可执行文件 这将为您设置以下标准SPM文件夹结构: 。 ├──.gitignore ├──Package.swift ├──套餐 ├──资料来源 │└──main.swift └──测试 […]

Swift中的设计模式:责任链模式

欢迎来到一系列致力于学习设计模式的文章。 尽管许多想法与代码无关,但我们的目标是向您展示如何在Swift中实现它们(在撰写本文时为Swift 3.0)。 每个帖子彼此独立,所有项目代码都可以 在Git上找到 。 这是其中一种更为自我描述的设计模式。 责任链设计模式允许一连串不同的对象(从相同的类/接口继承),将执行一段逻辑的职责传递给另一个对象。 在此示例中,我们将使用一名需要支付费用的员工,而该费用需要他们结清。 在我们的示例业务中,他们有几种选择可以清除这笔费用。 雇员 员工可以清除0至100英镑之间的所有费用。 老板 如果员工的支出大于此 ,则可以与老板联系,后者有能力结清101-1000英镑之间的费用。 首席执行官 除此之外,员工还需要与公司的首席执行官联系,后者对任何费用都严格限制了10,000英镑的费用。 其他任何事情都可能不会得到公司的批准。 如您所见,这形成了自然的“链”: 在我们的代码中,CEO,老板和员工是同一链的一部分,因此它们将实现相同的接口。 如果他们不能批准费用,他们将有能力将责任推上链。 用于此的UML如下所示: 码 首先,在Xcode中创建一个新项目。 我们不会在UIKit中碰任何东西,因此创建一个macOS Terminal项目。 首先创建一个Expenditure类。 这是一个简单的类,将仅容纳我们的费用。 在现实生活中,这可能包含更多相关信息。 代码如下所示: 然后,我们将创建Chain协议。 该协议将能够沿着管理“链”传递责任。 它看起来像这样: 员工,老板和首席执行官都将实施此协议。 如果费用金额太大而他们无法批准,他们将把费用沿着链条传递。 CEO代码与其余代码略有不同。 您可能还记得,CEO只能接受少于10,000英镑的同意。 为了停止销售,我们检查金额是否超过10,000英镑,并进行打印以告知用户: 然后,在我们的主类中,我们将其链接在一起。 首先,我们需要这样创建员工,老板和CEO对象: 然后,我们在每个适用位置上调用setNextManagementLevel() 。 它看起来像这样: 然后,我们与员工展开连锁反应: 现在,您完整的main.swift文件将如下所示: 运行您的程序,您将在终端中看到以下输出: 员工可以批准这笔支出 你的老板可以批准这笔支出 首席执行官可以批准这笔支出 这项支出过大,不会获得批准 程序以退出代码结束:0 欢呼! 您已经实现了管理层次结构-我的意思是-责任链设计模式。 您可以在Git上找到所有与此相关的代码。 山姆·斯通(@ […]

Monad Menagerie

在上一篇文章中,我花了一些时间看一下Monads —数据结构提供了称为bind或flatMap (或>>>= )的功能。 Monads为我们提供了一种强大的新功能组合方式。 然后,我花了一些时间来尝试了解Monad是什么。 最后,我们看到Optionals , Arrays和WebData类型都是Monad(并为它们定义了bind )。 在本文中,我将介绍很多基础知识,看看一些我们在Swift中不经常看到的Monad(或至少不经常被视为Monad)的Monad示例: Readers , Writer和Futures。 所有示例都可以在Github上找到。 有一个游乐场可以尝试。 请注意,为了使本文中的代码示例简短,我漏掉了一些细节-您可以在Github中查看工作代码。 作家✍️ 让我们开始与作家。 Writer可以将一个值与有关该值的一些信息打包在一起; 随着我们在后续计算步骤中继续处理该值,我们可以继续添加信息。 它通常用作记录进度或跟踪运行总计的一种方式。 在许多地方,您会使用一个突变状态(例如,一个inout参数,对全局日志记录功能的写入,甚至只是一个print语句),但是这些操作很难测试,并且在多线程环境中无法很好地工作。 Writer有两个类型参数:第一个是“登录”或“累积”的类型; 第二个是计算的当前值。 换句话说,我们有: Writer V (计算值)可以是任何类型,但是A (累加器)必须是称为Monoid的特殊类型。 Monoids¹只是带有“加法”运算符的类型,表示为和“零”或“空”值。 我不会在本文中介绍Monoid(请查看github代码以获取更多信息),但请注意Array和Int都是Monoid。 Int的“零”当然是0 ; 而“加法”运算符当然是+ 。 更有趣的是,Array的“零”为[] ,加法为.append或+ 。 因此,举例来说,假设我们正在编写一个图形包来处理图片。 struct Picture { let pixels: [UInt8] … } 我们希望保留所有操作的记录。 为了保持跟踪而不改变状态,我们需要将记录传递到每个操作函数中,如下所示: func makeGreyScale( log: [String] ) […]

如何在.ipa文件上执行iOS代码注入

代码注入是将外部代码引入现有软件系统的过程。 在本文中,我将分享在iOS应用上执行iOS代码注入所需的工具和技术。 借助XCode,可以设置实验来展示实际运行中的iOS代码注入。 想法是创建一组独立的代码,将其与最终应用程序打包,然后以某种方式执行新代码。 [注:此代码注入过程已被证明可在iOS 9.3、10.0.2和XCode v7.3和v8.0上运行。 我尚未在其他OS或XCode版本上尝试过此操作] 我们可以通过两种方式通过Xcode创建一个独立的二进制包: –通过(Cocoa Touch Framework)的动态库 –通过(可可触摸静态库)的静态库 静态库 在编译时链接的代码单位。 静态库需要在.ipa编译期间可用,才能执行其代码 静态库不支持Swift 没有已知的方法来指示.ipa加载静态库 我们 不能直接使用静态库。 您可能需要先将其转换为动态库 动态库 在运行时链接的代码单位。 Xcode确实要求在编译期间必须提供依赖的Dynamic Library / Frameworks,但不能保证将这些依赖关系打包到应用程序中。 这就是为什么有时您可能会遇到运行时动态库加载错误的原因,例如 dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib 我们可以为动态库构建Swift代码 需要在.ipa上执行Load Dylib命令,以便在启动应用程序之前将动态库加载到内存中。 是的,我们可以使用此🙂 选择dylib(动态库)作为我们的自定义代码包后,让我们使用XCode演示概念的代码注入。 通过XCode进行概念注入的代码证明 步骤如下 创建一个新的XCode项目 创建一个新的iOS应用程序目标。 创建一个新的“ Cocoa Touch Framework”目标。 让我们称之为“ PatchPGO” 创建一个新的Objective-C可可接触类。 我们称之为“ PatchLoader”。 在.m文件中添加以下方法。 @implementation PatchLoader 静态void […]

利用iOS 10的Today小工具

CIZO是一个很棒的应用程序。 它是由粉丝们为粉丝创建的,它为您的基于iOS的设备(包括电影,游戏,时尚,音乐会,技术等)提供了精选的“最佳内容”,从而节省了用户在互联网上搜索最新视频预告片的麻烦。 , 和更多。 我们喜欢它的内容,设计和动画。 但是CIZO存在内容交付问题。 还没有实现现有的机制(例如“推送通知”)来提醒用户新视频的到来。 因此,如果用户每天不检查CIZO,可能会错过新的预告片。 因此,我们不禁要问,是否有另一种方法可以让用户在不打开应用程序的情况下了解新内容? iOS 10提供了解决方案 在安装iOS 10之后,首先要注意的是Apple从锁定屏幕上删除了“滑动解锁”功能。 现在,如果您尝试按照习惯的方式滑动屏幕,则会看到一个锁屏,其中充满了今日小部件。 当您要查看天气,标题或公交信息时,这非常方便,因为您无需解锁手机即可看到。 只需快速滑动即可。 当我们看到iOS预览时,CIZO问题的解决方案就变得清晰了:如果我们添加一个CIZO Today小部件,该小部件可以显示和启动该小部件的视频播放,那该怎么办? 实施CIZO Today小部件 现在,让我们引导您完成在“今日”屏幕上创建和展示窗口小部件的过程。 添加目标 第一步,我们需要向CIZO应用程序本身添加一个新目标。 为此,请在Xcode中打开CIZO项目,然后选择“文件”>“新建”>“目标”。 然后选择今天扩展。 如果在添加了“今日扩展”目标之后重建了CIZO应用,则可以看到它已被列为可添加到屏幕的小部件: 如果此时我们将CIZO小部件添加到锁定屏幕,则外观如下所示: 那很容易。 我们现在需要的只是呈现内容。 决定显示什么 第一个想法是重用包含应用程序本身使用的Carousel View。 这将使用户能够以精美的动画方式在精选视频之间滚动。 但是,Apple指出,开发人员应避免将滚动视图放在“今日”窗口小部件中,因为用户难以在不无意间滚动到“今日”视图的情况下在窗口小部件中滚动。 因此,我们决定接受Apple的推荐,并决定仅在小部件中显示最后三个精选视频。 初始视图控制器 在为CIZO创建Today扩展时,Xcode创建了一个初始视图控制器(现在符合NCWidgetProviding) 。 如果在目标内打开MainInterface.storybord,则可以看到带有“ Hello World”标签的视图。 我们用包含三个图像视图的“水平堆栈视图”替换了该视图: 码 – ( void )openURL:(NSURL *)URL completionHandler:( void (^)(BOOL success))completionHandler; 在此方法的实现中,我们调用精选视频API。 如果响应与之前调用时的响应不同,则该小部件将提取有关前三个新视频的信息,并将缩略图放入图像视图中。 结果显示如下: […]

Swift用Swift编写的AST。 ∞的第3部分

在上一篇文章中,我开始介绍Swift语法的Declaration语法”部分。 在这篇文章中,我将介绍let和var声明。 Swift语法怪异的另一部分确实是棘手的部分。 让 let从简单的一个开始-let。 这是语法: 在概念上没有什么新鲜的。 让我们对列表使用与ImportPath相同的方法 struct ConstantDeclaration { let属性:[Attribute] let修饰符:[DeclarationModifier] 让初始化器:PatternInitializerList } 我不会将pattern-initializer部分分隔为另一种类型,并将其建模为元组: struct PatternInitializerList { 让初始化器:[(模式,初始化器?)] init(head:(Pattern,Initializer?), 尾巴:[(模式,初始化程序?)] { 初始值设定项= [head] + tail } } 将来我们可能应该将此列表抽象为类似List东西。 新类型呢? 声明修饰符使我感到惊讶。 只要看一下它的语法: 它包含所有可能的修饰符。 但是其中只有几个可以使用let声明有效。 看起来在这一点上,Swift团队经历了一些紧缩,并决定不对其进行过度设计。 我们将其建模为巨大的枚举: 枚举DeclarationModifier { 案例类 案例“便利” 案例动态 案例“最终” 大小写 案例懒惰 情况“可选” 案例`override` 案例`postfix` 大小写前缀 大小写必填 静态的 案例“无主” 案例`unownedSafe` 情况“弱” 案例访问(AccessLevelModifier) […]

完整的iOS 10设计和开发Bootcamp

完整的iOS 10设计和开发训练营 如果您是iOS开发的初学者 ,那么您的位置很好。 如果您已经尝试学习开发并遇到了beta错误(例如代码无法正常工作)的问题,那么您也很幸运。 我们在本课程中设计的所有应用都是在Xcode 8正式发布之后进行设计和编码的 。 甚至没有一个应用程序会给您带来代码冲突问题。 应用开发是一个过程。 设计应用程序 ,创建用户界面并编写代码以使该界面正常工作的过程。 我们将使用Sketch应用程序设计应用程序的UI,并使用swift 3编写应用程序的后端逻辑。 这次训练营还包括有关Swift 3和Sketch App的完整课程。 在设计整个课程课程时,要牢记学生要花时间学习,每个主题都必须在特殊的时间展示,以便学生轻松学习。 我们将首先为新主题创建一个测试应用程序,然后将创建一个包含针对我们刚刚学到的知识的应用程序的应用程序。 我们将学习约束和堆栈视图,相机,照片库,麦克风等。此外,我们将继续学习Firebase ,并探索诸如身份验证,实时数据库和存储之类的Firebase服务。 我们不仅会创建演示应用,还将学习为该应用创建图标和专业图形。 是的,我们本可以为图形资产提供很多价值,但是相反,我们将在此课程中教您设计这些资产。 学习完本课程后,您将学习阅读文档,并学会自己解决问题。 让我们开始吧。 #ios 10 #xcode 8 #sketchapp #firebase #development #development bootcamp 链接教程:完整的iOS 10设计和开发Bootcamp