Flutterのアプリアイコンを环境ごとに分ける

本记事では,Flutterのアプリアイコンをンを环境ごとに分ける简単な方法について绍介します。 アプリアイコン以外全般については,iOSメインですが以下をご覧ください。 Flutterで环境ごとにビルド设定を切り替える— iOS编 最低限度,以下くらいには分けると円滑に开発・テスト・リリースができます。 flutter_launcher_iconsを利用 Flutterには,flutter_launcher_iconsというiOS ・ Andoidアプリアイコンを生成するとても便利なツールがあります。 flutter_launcher_icons | 飞镖包 flutter_launcher_icons Dart软件包–该软件包简化了更新Flutter应用的启动器图标的任务… pub.dartlang.org fluttercommunity / flutter_launcher_icons Flutter启动器图标–一个软件包,简化了更新Flutter应用程序的启动器图标的任务。 完全… github.com 基本的な使い方は以下です。 1.インストール #pubspec.yaml dev_dependencies: flutter_launcher_icons:“ ^ 0.7.0” 2.设定を记述 #pubspec.yaml(flutter_launcher_icons-development.yamlでも良い) flutter_icons: image_path:“ assets / images / icon.png” android:true ios:是的 もっと细かい指定も可能ですが,READMEを见てください 3.画像ファイルを配置 上で指定したimage_pathの场所にアイコンに指定したい画像ファイルを置く。 4.コマンド実行 $ flutter包pub运行flutter_launcher_icons:main 风味ごとにアイコンを変える そして,本题のFlavorごとにアイコンを変えるやり方です。 以下のPull Requestで対応された机能ですが,まだ使い方のサンプルなど整っておらず, masterではなくflavorブランチに隔离されています。 通过sestegra读取风味图标文件·提取请求#69·fluttercommunity / flutter_launcher_icons 预期文件如下:flutter_launcher_icons.yaml或pubspec.yaml,来自默认图标flutter_launcher_icons… github.com […]

用Javascript转储iOS应用程序(第一部分)

最后, pkd将通过launch_add_external_service启动XPC服务。 在越狱设备上,我可以注入pkd并修补此方法以返回YES 。 现在所有的App Extensions都可以运行并且可以注入: 插件org.wordpress.WordPressNotificationContentExtension,pid = 1280 插件org.wordpress.WordPressShare,pid = 1281 插件org.wordpress.WordPressNotificationServiceExtension,pid = 1282 插件org.wordpress.WordPressTodayWidget,pid = 1283 插件org.wordpress.WordPressDraftAction,pid = 1284

Swift:关闭-已捕获列表

尊敬的开发商, 欢迎使用,今天我们将研究什么是闭包捕获列表以及如何快速使用它。 例子1 如果您曾经看过上面的代码,并且想知道[]之间的hack是什么,或者您无法理解,则可能是数组之类的东西。 这只是关闭捕获的列表。 不要强调[弱者],一旦完成本教程,您将能够解决这个谜团 让我们从一个简单的例子开始 例子2 闭包打印不同的值,因为闭包引用了变量“ a”和“ b”。 是闭包是引用类型,当值更改时闭包将反映出来。 有时,如果您的变量发生更改并且闭包引用了该变量,那将是非常灾难。 让我们通过示例来了解这个问题。 例子3 在上面的示例中,我们创建了一个闭包数组。 闭包不带任何参数,也不返回任何东西。 接下来,我们向闭包数组{print(i)}添加一个值 我们何时迭代并像这样调用闭包。 您能猜出输出是什么吗?……,嗯,如果您认为输出将是1 2 3 4 5,那么这里就不是这样了。 输出将是 所以这里出了什么问题,孔闭合是在执行for循环后引用i的最终值, 即 5 解决方案:让我们回到我们的第一个Example 2类型。 上面的闭包与示例2相同,但是差异[c,d]很小,您可能将其与数组混淆。 让我解释一下,当您在[ in ]之前的[]中输入变量时,闭包不再引用原始值,而是创建自己的变量副本,这称为C aptured list。 因此,即使您更改了原始值,闭包也不会反映该更改。 因此, 示例3的解决方案是 现在每个闭包捕获每个循环中j的当前值,因此当我们迭代数组时,输出将为0 1 2 3 4。 有时我们可能想为捕获的变量使用不同的名称,我们也可以像上面的示例一样更改。 在上面的示例中,我们采用了一个新的变量“ capturedJ”,好像我们不想知道原始值来自何处。 消息:我没有在本教程中介绍什么是“弱自我”,因为我将以“带有闭包的内存管理”的形式对此进行介绍。

CoreData和Swift 3

最近,我一直在研究一个简单的任务管理器应用程序。 我决定快点编写它,因为我不想使用任何Pod,所以我从心爱的Realm切换到了CoreData,这就是我们旅程的起点。 CoreData与Swift 3一起对我来说还很陌生,因此我想阅读文档,但仍在Swift 2.2中。 那里没有问题,StackOverflow肯定会救我! 好吧,事实并非如此简单。 我花了几个小时才能找到所有资源并使其正常工作。 因此,我现在正在编写本教程,以便您可以在一个地方找到我发现的遍布互联网的内容。 将CoreData添加到您的Xcode项目 答:简单的解决方案是在创建Xcode项目时仅选择CoreData。 Xcode将为您的AppDelegate文件添加所有必需的代码,还将为您创建.xcdatamodeld文件。 从这里跳到项目符号点2。 B.将CoreData添加到现有项目 这不是那么简单,但仍然很容易做到。 第一件事是打开您的AppDelegate文件,并在顶部导入CoreData 。 下一步是添加CoreData方法,如下所示: // MARK:-核心数据栈 懒惰的varpersistentContainer:NSPersistentContainer = { / * 应用程序的持久性容器。 这个实现 创建并返回一个容器,并已为 应用到它。 该属性是可选的,因为有合法的 可能导致存储创建失败的错误条件。 * / let container = NSPersistentContainer(name:“ tets”) container.loadPersistentStores(completionHandler:{(storeDescription,error)在 如果让error = error as NSError? { //用代码替换此实现,以正确处理错误。 // fatalError()使应用程序生成崩溃日志并终止。 尽管此功能在开发过程中可能很有用,但您不应在运输应用程序中使用此功能。 / * 出现错误的典型原因包括: *父目录不存在,无法创建或不允许写入。 *由于设备锁定时的权限或数据保护,无法访问持久性存储。 *设备空间不足。 […]

易于阅读的自定义字符串可转换

有什么快速简便的方法可以使您的打印对帐单输出更整洁,更易读? 看看协议Custom String Convertible! 我发现该协议在我的项目中非常有用,并且想分享一下这是什么以及如何使用它的快速概述。 Apple的文档将“自定义字符串可转换”定义为“一种具有自定义文本表示形式的类型。”简而言之,真正发生的是,当您使类或结构符合“自定义字符串可转换”时,您会自动获得一个内置的description属性,即您可以将其设置为任意字符串。 这个超灵活的描述属性是“自定义字符串可转换”的核心,因此它对于创建清晰易读的输出代码如此有用。 在我们开始将Custom String Convertible应用于您的代码之前,让我们看一下没有此协议的代码…即我们要避免的事情! 从自定义类型开始: struct Dog { var品种:字符串 变量名称:字符串 变量年龄:整数 var color:字符串 } 现在,我们将创建几个Dog对象的实例,并将它们添加到dogs数组中。 var狗:[Dog] = [] let dog1 = Dog(品种:“ Beagle”,名称:“ Spot”,年龄:5,颜色:“ Brown and white”) let dog2 = Dog(品种:“贵宾犬”,名称:“蓬松”,年龄:2,颜色:“灰色”) let dog3 = Dog(品种:“拉布拉多”,名称:“ Buddy”,年龄:9,颜色:“黑色”) 狗= [dog1,dog2,dog3] 在此示例中,让我们从最大年龄到最小年龄对这些狗进行排序,并使用打印语句来确保我的排序方法有效。 func sortDogs(){ dogs = dogs.sorted {返回$ 0.age> $ 1.age} 打印(狗) […]

学习Swift:闭包

嗨,大家好! 我决定我也想发布一些我在编程时学到的概念。 对于那些不知道的人,我是一名软件工程师,目前专注于在Android中构建移动应用程序。 但是,我喜欢iOS,自2014年以来一直在Swift中制作应用。 这将简短明了,将来我可能会对此进行扩展。 什么是封包? 闭包是可以像变量一样传递的函数。 一种将闭包视为持有函数的类型的方法,即字符串,整数,双精度型。 了解功能也很重要。 函数是在Swift中使用func关键字定义的代码块。 函数可以采用并返回无,一个或多个参数。 为什么使用它们? 因为它们使用简单的语法,所以可以使代码更整洁并易于阅读。 它们还使您可以以一种不太复杂的方式灵活地重用代码。 通过降低复杂性,这也使您的代码更易于调试。 我该如何写闭包? 这是闭包的几种形式: var noParametersOrReturn:()->()= { 打印(“无参数或返回类型”) } var noParametersReturnString:()->字符串= { 返回“无参数,返回字符串” } 如果闭包是函数的最后一个参数,则尾随闭包允许您简化语法。 func sayHiAndRunClosure(name: String, closure: () -> ()) { print(“Hi, \(name)!”) closure() } sayHiAndRunClosure(name: “Mary”) { print(“The closure was ran!”) } 有一个更短的语法。 闭包参数可以按位置($ 0,$ 1,…)而不是名称进行引用。 设数字= [1,1,2,5] 让奇数=数字。过滤器{$ […]

字符串,字符串之间的区别? 和弦!

当我遇到这个问题时; 我很困惑。 我打开操场检查他们的行为。 我很惊讶地知道很多事情,所以逐步写下我的知识。 首先,我声明了3个字符串,如下所示, var str1:字符串! var str2:字符串? var str3:字符串 打印(STR1)->无 打印(STR2)->无 print(str3)//初始化之前使用的变量’str3’。 在打印str3出现错误,这意味着我们必须先初始化所有非可选变量,然后才能使用它们。 需要注意的是str1为nil 。 现在让我们初始化为零 str1 =零 str2 =零 str3 = nil //无法将nil分配给’String’类型 再次,我得到了str3错误,这意味着我们无法将nil分配给非可选变量。 虽然我们可以将str1初始化为nil 。 然后我通过分配一些值来打印它们, str1 =“字符串” str2 =“字符串” str3 =“字符串” print(str1)->字符串 print(str2)->可选(String) print(str3)->字符串 str1正在打印“字符串”。 怎么样? 现在最后检查 print(str1!)->字符串 什么? 说真的,我可以拆开str1 。 我以为,它已经解开,所以不允许我解开。 我真的被这个练习所吸引,现在我已经理解了这些声明之间的区别。 让我们来看看, 可选 -表示常量或变量允许为“无值”。 可以使用可选绑定检查它们,以查看该值是否存在。 隐式解开可选 -有时我们知道,可选在初始化后将始终具有价值。 但是在声明它的时候,我们不确定它的价值。 […]

Swift协议可轻松创建可重用的基于XIB的自定义视图

在我的工作中使用了很多在Interface Builder中设计的自定义视图,我发现自己重写了相同的代码以使XIB中的视图无效。 然后,在阅读了一些文章之后,我发现协议可能是实现此目的的最佳方法(它有助于编写更少的代码)。 这里我们有协议: 使用此协议,自定义视图在被包含它的情节提要实例化时将自动从关联的XIB加载其自身的内容,而无需编写任何其他代码。 这将只是一行代码。 一种 当用作XIB的文件的所有者时,UIView子类可以符合此协议。 笔尖需要与类名称相同的名称,并且需要位于该类的束中。 如何使用: 声明您的自定义视图符合NibFileOwnerLoadable协议。 然后,您应该使用loadNibContent()覆盖init?(coder:) ,以便将其关联的XIB作为子视图加载并自动添加约束。 因此,假设您的自定义UIView子类名为SearchView,则代码将为: 最后一堂SearchView:UIView,NibFileOwnerLoadable { … 需要初始化吗?(编码器aDecoder:NSCoder){ super.init(编码器:aDecoder) loadNibContent() } } 在无法使用loadNibContent()的情况下(例如,因为您需要对子视图进行特定的配置),无论如何,您都可以使用此协议通过使用InstantiateFromNib()来仅实例化XIB的视图。 谢谢你的时间! 希望本文对您有所帮助。 在Twitter上联系: stefanofrosoni

什么是ABI稳定性,为什么重要?

Swift是一种移动的编程语言。 它发展很快。 增长的下一步是ABI稳定性,将在Swift 5中引入 应用程序二进制接口(ABI)定义软件程序如何与已编译的二进制文件进行通信。 ABI由 数据布局,它定义数据类型实例在内存中的布局方式。 调用约定,该约定控制如何传递函数的参数以及如何检索返回值 运行时和标准库 类型元数据,包含有关类型的信息 所有权决定 Mangling,使用哪个编译器唯一地标识源中标识符的名称。 ABI稳定性意味着定义一组约定,规则并获得标准化表示,以便将来的编译器版本生成兼容的二进制文件。 当前,如果将用Objective-C编写的应用程序迁移到Swift,则该应用程序的大小至少增加5-10 MB。 这是因为每个使用Swift构建的应用都在其中嵌入了Swift框架。 当Swift 5在2019年初实现ABI稳定性时,Swift标准库和运行时将被嵌入到iOS中,并且所有应用程序都将能够使用它。 因此,您的应用大小会减少。 实现ABI稳定性的第一步是源兼容性。 源代码兼容性意味着较新的编译器可以编译用较早版本的Swift编写的代码。 使用Swift 4.2,可以实现Source兼容性。 您的应用程序现在可以包含符合不同版本的Swift(例如Swift 3或Swift 4)的库。 具有ABI稳定性,编译器生成的二进制二进制文件的未来版本需要在不破坏现有应用程序的情况下工作。 例如:如果Swift团队决定将来支持高级并发机制,则其设计必须符合ABI。 他们可以在内部进行许多更改,但必须向后兼容。 目前,SDK开发人员无法使用Swift分发封闭源二进制文件。 到目前为止,他们都依赖Objective-C。 使用ABI,接下来是模块格式的稳定性。 完成后,SDK开发人员将能够将Swift源代码作为封闭的二进制文件与模块文件(标头文件)一起提供。 Swift ABI的稳定性将是这门年轻语言的成熟点。 我的Twitter Deekshith Bellare

Foursquare API + ARKit

9月初,我们看到了iOS 11的推出,从而为数百万个启用了AR(增强现实)的设备提供了支持。 在发布之后,我们考虑了一些创新的方法,Foursquare的位置智能可以为您提供体验,以吸引用户。 在进行演示之前,我们将更深入地讨论AR和ARKit。 “增强现实是通过将另一幅图像覆盖在周围环境的实时视图上而产生的增强图像或合成图像。 “ ARKit如何工作? ARKit使用一种称为视觉惯性里程表(VIO)的技术,并具有一些2D平面检测功能。 VIO意味着该软件可以实时跟踪您在太空中的位置。 这是通过您的姿势完成的,该姿势可以通过摄像头系统以及加速度计和陀螺仪(CoreMotion)进行跟踪。 就像汽车中的里程表会跟踪汽车的行驶距离一样,VIO系统也会跟踪iPhone在6D空间中的行驶距离。 6D表示xyz运动的3D(平移),加上俯仰/偏航/横摇的3D(旋转)。 ARKit的核心功能之一是平面检测。 这是必需的,因此您可以在地面上放置内容的地方,否则看起来好像在太空中漂浮得很厉害。 这是根据光学系统检测到的特征计算得出的。 现在,我们对AR和ARKit有了更多的了解,让我们深入研究一下快速演示: 为了让您入门,我们构建了一个由ARKit驱动的应用程序,以演示位置智能的功能。 在下面详述的示例中,您将能够使用Foursquare Places API在全球范围内移动手机以查看位置及其与您的距离。 我们也鼓励您查看我们的Pilgrim SDK,您可以在其中实时了解,与用户交流和互动。 快速开始 要快速上手,您可以在手机上获取该应用,或在下面克隆以下存储库。 在建造过程中,请在开始后添加您的钥匙/秘密。 git clone git@github.com:garethpaul/foursquare-ar-camera-ios.git 克隆存储库并添加密钥后,即可在任何iOS设备上进行扩展。 我们建议使用现实生活中的电话-由于在本地测试AR的复杂性。 在我们开始之前.. 我们还要感谢Mapbox和Andrew Hart的团队在此领域的启发和提供进一步工作方面所做的早期工作。 建造ARKit + Foursquare 在较高级别的示例中,我们执行三个主要功能。 确定位置 找到一些地方 将地点添加到AR 第1步-确定位置 我们利用核心位置通过感官信息确定基本位置。 该框架使用所有可用的机载硬件,包括Wi-Fi,GPS,蓝牙,磁力计,气压计和蜂窝硬件来收集数据。 LocationManager类符合CLLocationManagerDelegate并处理从CoreLocation检索位置和方向。 在我们的示例中,我们的主ViewController符合SceneLocationViewDelegate。 委托是一种简单而强大的模式,其中,我们的ViewController与另一个对象一起起作用。 委托对象保留了另一个对象的引用。 委托的主要价值在于,它使我们能够轻松自定义一个中央对象中多个对象的AR行为。 第2步-查找热门地点 加载视图后,我们将使用Foursquare的Places API从SceneLocation的LocationManager确定位置。 为简单起见,我们已将其添加到主ViewController中,但建议为静态服务(模型和控制器)创建一个单独的类。 在函数getFoursquareLocations中,我们利用端点“ venues / […]