Tag: swift

在Swift 3中获取Facebook页面帖子

大家好…。 大家都知道Facebook SDK登录并使用Facebook SDK获取用户详细信息,例如用户名,电子邮件和电话号码等。 在本教程中,我将向您介绍如何使用Facebook Graph API从公共Facebook页面获取公共帖子,以及如何进一步获取帖子附件。 请记住,您必须先注册您的应用程序Facebook Developer Account。 https://developers.facebook.com/ 在此,我将使用Facebook SDK。 和SwiftyJSON将json映射到模型类中。 众所周知,在开始编码之前,请打开xcode并创建一个单视图应用程序。 现在,您必须在该项目中安装两个库。 我将使用可可豆荚来安装这些库。 在项目中轻松创建一个pod文件,然后在podfile中写入以下行 吊舱’FBSDKCoreKit’ pod’FBSDKLoginKit’ pod’SwiftyJSON’,’〜> 3.1′ FBSDK登录套件还需要我们需要访问令牌才能获取Facebook页面数据,因此首先需要通过以下代码使用Facebook登录。 在开始编码之前,我们需要在View Controller上创建一个UIButton,然后在UIView Controller类内然后在IBAction内创建该按钮的IBAction。编写以下代码以使用Facebook SDK登录。 我正在使用上面的Facebook Page的ID来获取公开帖子。 您可以关注此页面。 它归我所有。 宣传也很重要。 毕竟,我必须在我的Facebook帖子上增加喜欢的次数。 https://www.facebook.com/pg/SandsHellCreations/ 现在回到工作,毕竟我们必须完成任务。 您可以获得我们必须解析的以下类型的json结果。 为了解析数据,我将创建SwiftyJSON helper文件,我们将在解析和创建模型类中使用该文件。 因此,在名为SwiftyJSON Helper的项目中创建一个新的.swift扩展文件,并在其中写入以下代码。 这仅包含用于重整代码的操作符重载。 现在创建一个名为FBModel.swift的swift文件,并将以下代码粘贴到其中,以将数据从json映射到Model类。 现在创建一个以下变量,以将帖子数据存储在View Controller类中。 var data:FBModel? 我们已在getPosts()函数中将json解析数据分配给此变量。 另一件事是,我们需要在分页对象中检查json是否存在下一个命名值,那么我们必须在此图形API中实现分页。 因为在一个API Hit中,我们仅获得25个公开帖子的数据。 这种情况我们已经在getPosts()函数中处理过。 如果帖子多于25条,则要获取所有帖子,我们需要应用分页。 如果发布数超过25,则json中的分页对象内仅存在下一个变量值。 然后编写以下函数来获取分页剩余的帖子数据。 在此,我们获得剩余的帖子,并将这些帖子附加到已经存储了先前帖子的数据变量中。 […]

在Swift中解码ASN.1 DER序列

我正在使用的API返回使用椭圆曲线数字签名算法(ECDSA)签名的敏感数据。 签名本身是一个ASN.1 DER序列-因为我在网上找不到Swift或Objective-C DER解析器,所以我需要自己编写。 ECDSA签名可以分为两个整数。 我们可以使用openssl检查此整数。 $ echo -en“ 3045022100a85e76ff1f18e52d4eccde774aa46e3ec2891068ebef89a7cb6e0653eb0dffb202204cd76e19bcb18d76c13af0ea061117cbd6d3c8fbd1d9fc9aac265266371c3a3f” xxd -pu -r>签名 $ openssl asn1parse-通知der-输入签名 。 0:d = 0。 hl = 2 l =。 69弊:SEQUENCE。 。 2:d = 1。 hl = 2 l =。 33 prim:整数。 :A85E76FF1F18E52D4ECCDE774AA46E3EC2891068EBEF89A7CB6E0653EB0DFFB2 。 37:d = 1。 hl = 2 l =。 32素数:整数。 :4CD76E19BCB18D76C13AF0EA061117CBD6D3C8FBD1D9FC9AAC265266371C3A3F 如您所见,这两个整数在签名的十六进制编码版本中可见,但是我们如何使用Swift将它们取出呢? 维基百科上有一些DER编码数据的很好的例子。 事实证明,整个十六进制字符串都位于类型-长度-值三元组中。 这意味着数据所保存的每个可变长度值都以其类型和长度为开头,每个值都为1个字节。 我发现此页面描述了ASN1解码器应该期望的类型标签。 让我们将其表示为一个enum […]

iPhone尺寸等级

尺寸类别可让您对屏幕的宽度和高度进行分类,并根据这些组合设置条件。 例如,您可以确定化身在具有紧凑宽度的屏幕上为30 x 30 pt ,但在具有常规宽度的屏幕上为50 x 50 pt ,这仅仅是因为较大的屏幕上有更多的空白空间。 由于纵向和横向之间或iPhone和iPad之间的版式可能完全不同,因此尺寸类对于自定义版式超出常规的“自动版式”约束至关重要。 宽度和高度共有3种大小类别: Compact , Regular和Any 。 通过组合这些,您将同时影响多个设备。 例如, 紧凑型 (宽)x 常规型 (高)将以纵向模式定位所有iPhone,但不会影响横向或iPad。 有趣的是,即使屏幕的宽度很大, Compact x Compact也会影响风景中的iPhone(iPhone 6 +,7 +,8 +除外)。 因此,重要的是要熟悉不同的组合,如下图所示。 归功于: www.designcode.io

您已经准备好使用iPhone X,您的应用程序准备好了吗?

来自App Fixers的问候。 App Fixers为Apple App Store或Google Play Store中的移动应用程序提供“维护即服务”,以提高性能和可靠性。 在将应用程序传递给Apple和Google之后,应用程序开发不仅会结束,软件项目通常需要经常更新。 每月收到您的订阅: –了解应用性能和维护建议 –从Apple或Google获取即将发生的更改的通知 –移动应用和后端更改,UI / UX更改以及错误修复(最长20小时) –我们每月处理两次您的TestFlight或App Store上传 –在需要时通过电子邮件发送给我们寻求帮助 我们还提供7天退款保证。 我们提供了一个新产品,其中包括: 准备iPhone X应用程序布局支持(新) 准备iPhone X全屏网站布局(NEW) 此博客文章最初发送给App Fixers电子邮件订阅者:

在Swift中作为观察员的闭包

随着Swift进入编程领域,为开发人员打开了大门,使开发人员能够通过使事情变得简单和紧凑将其思想转化为Apple平台上的应用程序。 Swift引入了许多新功能和概念,但是在这篇文章中,我们将讨论Closures,这是当今iOS开发人员中非常有趣且最流行的编码实践之一。 根据Swift文档: 闭包是可以独立传递的功能块,可以在代码中传递和使用。 闭包不仅是Swift独有的,而且在Swift引入之前,它们就存在于其他编程/脚本语言中。 Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambda。 我们大多数人都不熟悉闭包,但是很长一段时间以来就在我们的代码中使用它们。 在我们日常的编码实践中,有一些实例我们间接使用了闭包,但我们对此并不了解。 以下是下面提到的几个示例: 在第三方API的帮助下从服务器获取数据; 在这里,您不必等待数据任务完成并异步获取数据,并在收到响应后使用@escaping闭包将其还原。 使用视图动画,因为某些功能需要异步执行。 闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。 这称为关闭这些常量和变量。 让我们快速看一下如何定义闭包: {(params)-> returnType in // statements} 让我们来看看闭包表达式: let fullname:(String,String)-> String = {(firstName,lastName)返回firstName +“” + lastName} fullname(“ Prashant”,“ Gautam”)//结果为Prashant Gautam 在上面的表达式中,闭包接受String类型的两个参数并将其连接起来并返回新的字符串。 闭包表达式中的参数可以是输入输出参数。 我们也可以使用可变参数,但您必须命名可变参数。 元组也可用作参数类型和返回类型。 注意: 闭包表达式语法中的参数不能具有默认值。 为了这篇文章的主题,我被限制不要过多地研究闭包。 您可以在此处找到有关闭包的广泛信息。 作为iOS开发人员,我们都知道Notifications和KVO 。 两者都用于通知多个对象,以响应应用程序或对象属性的某些更改。 让我们在闭包的帮助下创建自己的观察者。 相信我,将您自己的代码用于同一目的非常有趣。 让我们举一个基于UITabbar的应用程序的简单示例。 演示应用程序中有两个选项卡。 在第一个选项卡上,我们有一个按钮,该按钮触发更新以将新消息反映给作为观察者添加的所有对象。 首先,我们创建一个基于标签栏的应用程序,并在FirstViewController内添加一个按钮“ Update ”,以触发更新的消息。 为此按钮添加操作updateAction(_ sender:Any) 。 […]

Swift NavigationViewController

点选画面后,编辑→嵌入→导航控制器 随后建立第二个页面并用button连接 问题: 那么第二页使用dissmiss的方法可以回去吗? 因为popViewController是属于navigationController的方法,不是ViewController本身的方法。 @IBAction func buttonAction(_ sender:UIButton){ // dissmiss的方法按了没任何效果 //关闭(动画:true,完成:nil) //以下为正确的使用方式 self.navigationController?.popViewController(动画:true) } 点选第一页的导航,可以改标题及返回按钮名称 第二页可以使用导航项拉入上方即可 使用程式码进入页面或离开页面 进入,使用pressent会没有导航 navigationController?.pushViewController(“进入页面的ID”,动画:true) 离开 navigationController?.popViewController(动画:true)

Swift中的设计模式:装饰器模式

欢迎来到一系列致力于学习设计模式的文章。 尽管许多想法与代码无关,但我们的目标是向您展示如何在Swift中实现它们(在撰写本文时为Swift 3.0)。 每个帖子彼此独立,所有项目代码都可以 在Git上找到 。 想象一下,您在苹果公司工作,而您要负责设计苹果网站的后端。 我们特别感兴趣的是该站点的MacBook订购功能。 尽管只有3款MacBook(在撰写本文时为MacBook,Air和Pro),但MacBook的组合数量会大大增加。 从软件设计的角度来看,用于订购过程的最明显的OOP设计风格可能是继承(多态)。 您将从基类(例如MacBook)开始,它将包含与每个MacBook相关的各种属性(即成本和说明)。 一对一的示例如下所示: 那很棒。 但是考虑一下苹果网站上实际有多少种MacBook组合? 我还没有完成数学运算,但是它必须在100年代。 按照这条路线,您将得到一个看起来像这样的设计: 它开始显得凌乱。 对于每个模型,您需要添加一个新的子类。 如果价格变动怎么办? 每个受价格变化影响的模型都需要更新,而这将变成一大堆麻烦。 装饰器模式在这里成为自己的特色。 它允许我们在运行时向对象添加其他要求。 我们可以使用用户在订购时选择的所有其他功能来“装饰”我们的基本MacBook类。 它遵循“开放-封闭”原则,即是的,对象应该是可扩展的,但不能,您不能更改现有代码(以CocoaPods为例)。 Decorator模式确实使用继承,但是以一种自然的,更有限的方式。 这样可以确保将来扩展系统不会像上图那样结束。 您仅需使用少数子类,就可以进行MacBook所需的100多种定制。 看起来像什么 装饰器模式包含一些基本组件,我们在运行时对其进行了扩展,并用装饰器类进行“装饰”。 在MacBooks的情况下,核心组件将是MacBook(在本示例中,称为MacBook Regular,以免引起混淆!),MacBook Pro和MacBook Air。 这些都将遵循相同的协议,并且能够覆盖协议中的属性,从而赋予其独立性(即,每台MacBook的成本不同)。 装饰器将从装饰器类继承,该装饰器类符合基本协议。 装饰器类包含基础组件的实例,我们将其用于将核心组件包装在装饰器中。 这是一个大致的示意图: 当我们使用MacBook示例进行总结时,您开始了解装饰器模式的工作方式: 它在代码中的外观 首先,在Xcode中创建一个新项目。 我们不会在UIKit中碰任何东西,因此创建一个macOS Terminal项目。 这些类都不复杂。 让我们从所有对象与以下对象交互的基本MacBook类开始: 这只是说所有符合MacBook协议的对象都应包含返回正确值类型的成本和描述项。 所有的ConcreteComponents都符合它,如下所示: 它们扩展协议属性并返回自己的值。 接下来,我们看一下MacBook Decorator。 该类符合MacBook协议,这意味着我们可以返回传递给它的MacBook对象的成本和描述。 这将是所有装饰器都继承自的类: 我们的装饰器是从此类继承的,这意味着它们能够添加自己的单独成本,并添加到传递给它的MacBook实例的描述中。 它们看起来像这样: 完善。 现在,我们要做的是模拟MacBook的自定义。 […]

使用适用于iOS的Keychain保护用户数据

在本文中,我将讨论使用Apple的钥匙串服务在iOS应用中安全地持久存储数据。 我将向您介绍Keychain Services API的功能,并说明通过实现包装程序在应用程序中开始使用Keychain功能的快速简便的方法。 钥匙串提供了一种安全的替代方法,可以使用NSUserDefaults,plist或类似方法来保存敏感数据,例如用户名和密码。 您可能已经知道,NSUserDefaults简单有效,可以将小的,简单的数据位(例如NSNumbers或NSStrings)保存到设备的文件系统中。 但是这些数据绝不能安全地存储,因为黑客可以很容易地从设备访问它。 苹果提供了Keychain Services API来解决此问题,并帮助开发人员构建可安全处理密码和其他敏感信息的应用程序。 Apple文档中将钥匙串定义为: “……一个加密的容器,代表应用程序和安全服务安全地存储小块数据。” 和 “…只是存储在文件系统中的数据库。” 钥匙串之所以出色,是因为在将数据加密存储到文件系统之前,它会自动进行处理,因此无需浪费时间来构建加密算法。 可以将OS和iOS中的钥匙串配置为锁定。 锁定后,将无法访问和解密存储的钥匙串项目。 对于iOS,钥匙串在设备锁定时被锁定,在设备解锁时被解锁。 即使已解锁,除非另有配置,只有创建项目的应用程序才能访问它。 钥匙串还提供其他功能,例如:在应用程序之间访问钥匙串项目。 通常,一个应用程序只能访问其创建的项目,但是可以进行配置以使其访问一组指定应用程序内的数据。 实施钥匙串API 使用钥匙串直接存储和检索数据并非易事。 不幸的是,Keychain API使用起来有些折磨。 它是用C编写的,需要大量耗时的配置。 幸运的是,Apple和许多其他贡献者创建了更高级别的包装程序,以隐藏令人费解的C代码,并从底层组织推动事情发展。 如果您想直接使用API​​,似乎这是最好的教程(尽管已经过时了):Ray Wenderlich在iOS 5中的基本安全性。 Apple API参考文档的这一页也是查看如何直接在您的应用程序中实现钥匙串的好方法。 包装器实施 苹果自己的钥匙串包装器称为GenericKeychain,可在Objective C和Swift的示例代码中找到。 其他包装器作为Cocoapods或Github和其他依赖项管理站点上的扩展库存在。 这是我推荐的一些钥匙扣包装纸: Jason Rendel(jrendel) 的Swift的 SwiftKeychainWrapper 。 https://cocoapods.org/pods/SwiftKeychainWrapper或https://github.com/jrendel/SwiftKeychainWrapper Sam Soffes为目标C设计的SAMKeychain.https://cocoapods.org/pods/SAMKeychain 马修·帕尔默 ( Matthew Palmer)的《 锁匠》( Swift) (查看视频教程)https://github.com/matthewpalmer/Locksmith 大多数包装器都包含三种方法:一种添加钥匙串项,一种编辑钥匙串项,一种删除它,并通过一行代码即可访问和编辑钥匙串项。 分步指南:使用包装器实施钥匙串 让我们在Jason […]

C静态库

为什么要使用库? 使用库可以加快编译的链接阶段,因为要查找和打开的文件较少。 什么是静态库? 静态库是对象文件的集合,其中可以包含函数,变量等。在Linux中,静态库以’.a’扩展名结尾,而Microsoft Windows使用“ .lib”扩展名。 如何建立它们 假设我们要创建一个带有两个函数“ strlen.c”和“ atoi.c”的静态库。 首先从源代码获取目标文件。 -$ ls atoi.c标头.h main.c strlen.c -$ gcc -c strlen.c atoi.c -$ ls atoi.c atoi.o标头.h main.c strlen.c strlen.o 现在已经创建了目标文件,使用归档器(ar)创建静态库。 -$ ar -rc libf.a strlen.o atoi.o -S ls atoi.c atoi.o标头.h libf.a main.c strlen.c strlen.o 这将创建一个名为libf.a的静态库,其中将两个目标文件都复制到其中。 “ c”标志创建档案,“ r”用于将较旧的目标文件替换为较新的文件。 现在,我们必须使用ranlib索引该库,以便编译器可以加快库中的符号查找速度。 您可以使用’nm’列出libf.a中的符号。 -$ ranlib libf.a -$ nm libf.a […]

生成并托管您的iOS文档

作为程序员,每个人都告诉您要负责并编写代码。 它为您正在编写的代码提供了上下文,并使您更容易了解正在发生的事情。 记录我们的代码很棒,但是如果我们可以直接从代码中生成并托管漂亮的文档,该怎么办? 通过正确的设置,我们甚至可以搜索文档。 请看下面的样本文档页面: BackgroundColorState枚举参考 可以通过用下一个后台状态覆盖状态来更新状态。 jgsamudio.github.io 有什么计划? 在这篇文章中,我们将使用Jazzy为我们的文档生成一个网站。 然后学习如何在Github Pages上托管它,最后确保它与Travis CI保持最新。 如果您不熟悉CI或尚未为项目设置Travis CI,请查看此博客以获取一些见解:“如何为CI和iOS Project自动化CI” 产生文件 开发人员可以尽可能快地编写文档,但速度却已过时。 我们需要一种生成文档的方法,这样就可以避免在很多地方都必须更新文档。 Jazzy是一个命令行应用程序,可以将Swift和Objective-C文档生成到html网站中。 爵士安装 在安装Jazzy之前,我们需要安装“ Xcode命令行工具”。 您可以运行以下命令来安装它们: xcode-select —-install 。 安装完成后,您可以运行[sudo] gem install jazzy来安装Jazzy。 成功安装后,我们可以运行Jazzy并使用不同的文档选项对其进行自定义。 爵士乐 –min-acl内部\ –no-hide-documentation-coverage \ -主题全角\ –output ./docs \ –documentation =。/ *。md 1. min-acl内部 min-acl属性控制生成的最低访问级别。 由于我们正在记录所有公共函数和变量,因此将其设置为internal 。 私有和Fileprivate函数和变量将不在生成的文档中。 要记录所有内容,必须将min-acl设置为private 。 2.无隐藏文档覆盖 在文档中启用文档百分比计数器。 3.主题全角 使用搜索栏更改为自定义主题。 […]