Tag: ios

中国的MapKit

Apple Maps是我的默认地图应用程序。 无论我走到哪里,我总是使用它。 特别是在日本和新加坡,它将告诉我地铁站的出口以及如何步行。 超级方便。 我就喜欢。 在中国,Apple Maps使用高德提供的数据。 它也可能被称为AutoNavi。 这是一家本地公司,隶属于阿里巴巴集团。 他们在中国的数据相当不错。 与百度地图不同,与高德从未接触过错误的路线。 但是,它们在中国境外的数据非常有限。 如果您在中国并且正在寻找不在中国的地方,那么地图将如下所示: 这就是欧洲和美国的地图外观。 只有街道名称。 如果您认为情况不好,请让我们检查一下新加坡。 我们基本上是在看空白地图。 不幸的是,如果我们尝试在中国以外的地方搜索,我们将永远不会获得想要的结果。 它只会显示位于中国的结果。 如果您设备的GPS位置在中国,您将遇到问题。 (请注意:至少对于在中国销售的设备,我在其他国家/地区没有购买任何设备。如果您知道其他设备是否也会发生这种情况,请发表评论并让我知道。谢谢。) 也许您不是在制作旅行计划应用程序,但是这些问题也可能会影响您的客户。 MapKit使用与Apple Maps应用完全相同的地图数据。 以下示例来自Weather Line。 我在中国,想查询阿姆斯特丹的天气。 这就是我得到的: 如果您正在模拟器上进行测试,则无法发现问题,因为在模拟器地图上,数据来自Apple,而不是来自高德。 解决方案 Mapbox是一个很好的选择。 他们有很好的文档。 您甚至可以在https://www.mapbox.cn上请求在中国使用的其他API密钥。 他们声称它将为中国用户更快地加载地图。 如果由于某些原因您不想使用Mapbox,可以尝试使用Google Maps Web视图。 即使不是本地语言,您也可以使用Google Maps JavaScript API来实现MapKit和Mapbox提供的大多数功能。 请记住,要使用适用于中国的Google Maps API,URL必须为 http://maps.google.cn 。 仅HTTP有效。 HTTPS没有。 下一步是什么 我将写有关WKWebView的文章 。 这将分为两个部分。 在第一个中,我将讨论WKWebView的基础知识,如何在Mac上加载本地文件和调试。 在第二篇文章中,我将展示native和JavaScript如何相互通信。 […]

反向工程iOS应用程序-iOS 11版(第1部分)

尽管已经有很多关于“逆向工程iOS应用”的博客文章,教程甚至是youtube视频,但每次Apple发行新的iOS版本时,“游戏”都会改变。 研究人员必须找到一种新方法来越狱iOS的新发行版,并且我们必须更新工具以与新越狱环境一起工作。 对于最新的iOS 11越狱尤其如此,基于Ian Beer的async_wake漏洞的LiberiOS和Electra越狱技术与以前的越狱技术截然不同,并且大多数(全部?)现有工具在这些越狱时都被破坏了。 我将重点关注LiberiOS,因为这是我测试过的唯一一次越狱。 也是因为我是乔纳森·莱文(Jonathan Levin)的工作及其对社区的贡献的忠实拥护者。 LiberiOS越狱就是所谓的无KPP越狱(KPP代表内核补丁保护)。 基本上,这意味着KPP保护的内核区域没有任何修改,并且大多数越狱工具(如Clutch,dumpdecrypted)以及依赖Cydia Substrate的所有调整都尚未更新以使用此方法。 这篇文章的篇幅太长了,所以我决定将其分为两部分: 第1部分 :将帮助您设置设备并解密iOS应用 第2部分 :将帮助您转储应用程序的类,分解其指令并操纵运行时以更改应用程序的行为 教学大纲 第1部分 越狱您的设备(外部链接) 设置iTunnel 设置bfinject 使用bfinject decrypt解密Starbucks iOS应用 第2部分 使用class-dump转储星巴克应用程序的类 使用Hopper拆卸星巴克应用程序 使用bfinject cycript运行时操作 要开始重新使用iOS应用,您需要越狱的设备。 在本文中,我假设您使用的是iOS 11,因此让我们开始越狱设备。 我喜欢iClarified教程,并且它们对于在iOS 11–11.1.2上越狱您的iPhone / iPod / iPad(iDevice)来说是一个很棒的教程: 请按照iClarified的教程在此处使用LiberiOS越狱iDevice。 现在您的iDevice已越狱,我们可以开始对iOS应用进行逆向工程! 设置iTunnel 尽管LiberiOS的Dropbear SSH版本启用了wifi连接,但我发现USB更快,更可靠。 要使用照明电缆通过USB通过SSH进入设备,您需要设置iTunnel (或类似工具)。 从此处下载最新版本的iTunnel 提取.zip文件的内容 将itnl二进制文件复制到/usr/local/bin 将libmd.dylib库复制到/usr/local/lib 您也可以将两个文件都放在一个文件夹中,并使用./前缀执行itnl命令。 设置bfinject 正如我之前所说,许多现有工具无法像以前的越狱一样工作,但是感谢Bishop Fox,我们现在可以通过执行以下操作在LiberiOS中使用Clutch : 在桌面上创建一个名为bfinject的文件夹 […]

报价代码适用于iOS!

非常自豪地宣布报价代码已发布到iOS! 这是下载游戏的直接链接-https://itunes.apple.com/us/app/quote-codes/id1142929451?ls=1&mt=8 这是一段了不起的旅程,我们衷心希望您喜欢这款游戏。 另外,请确保继续检查博客,以了解我们对《报价代码日记》的延续。 我们很快将深入研究我们在游戏中使用的开发过程和技术。 这是下载游戏的链接— https://itunes.apple.com/us/app/quote-codes/id1142929451?ls=1&mt=8 对于任何新闻查询: 前往我们的 新闻资料袋 或者,您也可以给我们发送电子邮件: quotecodes@pixeldrop.in

在BuddyBuild中处理更新的pod

我们正在使用BuddyBuild作为CI。 运行得很好。 今天,我遇到了有关更新的广告连播的问题,这是我们如何解决问题的记录。 在我们的一个应用程序中,我们使用了自己的本地条形码扫描仪。 它使用子视图控制器模式进行了一次甜蜜的更新,该模式允许轻松进行自定义和实例配置。 版本4.1.1已发布到CocoaPods 因此,我使用pod update BarcodeScanner更新了pod,更新了代码以使用新的委托方法和配置。 一切都很好。 让我们提交并发出Pull请求。 BuddyBuild踢的构建,它失败。 日志说明了Podfile和Podfile.lock之间的冲突 尝试脚本 所以我想我可以运行一些自定义脚本来强制BuddyBuild更新Pod。 查看有关自定义脚本的文档,克隆后脚本听起来像是编写脚本的好地方 Buddybuild自动分析您的存储库,并自动以最佳构建设置对其进行配置。 但是,如果在构建过程中需要自定义逻辑,则可以在存储库中包含自定义脚本,以在构建过程中的四个点运行 克隆后脚本在git clone之后立即运行,然后buddybuild对存储库中的内容进行任何分析。 让我们创建一个文件buddybuild_postclone.sh 没用 让我们重置本地规格存储库 也没用。 然后,我仔细查看了日志 将CocoaPods版本切换到1.1.1 看来BuddyBuild正在使用cocoapods 1.1.1 。 我的是version 1.4.0 。 指定CocoaPods版本 所以我需要指定正确的CocoaPods版本,以确保我和BuddyBuild在同一页面上 在我的Gemfile 然后运行bundler install并检查Gemfile.lock以查看CocoaPods的版本为1.4.0。 新希望 提交更改后,BuddyBuild选择了正确的CocoaPods版本,现在可以正确使用新的Pod。

Golang:将推送通知发送到iOS设备

假设: 您的计算机中已安装Go语言 支持APNs的iOS示例应用程序用于测试 步骤1:生成证书PEM文件。 本文将帮助您生成PEM https://www.raywenderlich.com/123862/push-notifications-tutorial 步骤2:为APN安装Go库 去获取github.com/anachronistic/apns 步骤3:在main.go中编写以下函数。 将证书PEM文件放置在config文件夹中。 您可以根据需要更改推送URL。 func SendPushToClient(pushText string,pushToken string){ fmt.Println(“ SendPushToClient”) 有效负载:= apns.NewPayload() 有效负载。警报= pushText pn:= apns.NewPushNotification() pn.DeviceToken = pushToken pn.AddPayload(有效载荷) 客户端:= apns.NewClient(“ gateway.sandbox.push.apple.com:2195”,“ ./config/pushcert.pem”,“ ./config/pushcert.pem”) 响应:= client.Send(pn) 警报,_:= pn.PayloadString() fmt.Println(“ Alert:”,alert) fmt.Println(“ Success:”,分别为成功) fmt.Println(“错误:”,分别为错误) } 步骤4:从主函数调用“ SendPushToClient”函数。 在以下代码中替换客户端令牌 func main(){ SendPushToClient(“您好,来自APN”,“ ”) } 步骤5:编译并运行 去跑主 完整源代码main.go 包主 导入( […]

宠物小精灵GO之后,疯狂的人跟随着Prisma!

全世界的人们都在通过另一个依赖AI创新的病毒应用程序“ Prisma”将自然照片转换为详细的艺术品,从而使用户能够在一瞬间将不起眼的图片转换为毕加索的艺术品。 截至周四,Prisma这个应用程序每天吸引了100万用户,该公司正在重新考虑通过创新将照片分开的想法。 尽管为照片添加频道的想法已经存在了相当长的时间,但Prisma iOS应用程序的卓越之处在于它依赖于“神经系统和人为混合的大脑”来重做图片。 好吧,这就是此应用程序背后的机械过程的全部内容。 “人们想创造一些东西,然后我们允许他们进行实验-Prisma联合创始人Alexey Moiseenkov! Prisma不是Instagram用于复制其他应用程序某些过滤器的艺术过滤器,而是它改变了您想象艺术力量的方式。 它从头开始创建照片,App开发人员的基地位于莫斯科。 Prisma 联合创始人阿列克谢·莫伊森科夫(Alexey Moiseenkov)在星期四的一次采访中说: “我们重新 塑造 了形象 。” “它与您刚刚分层的Instagram过滤器不同。 我们像真正的画家一样画画。” 用户可以拍照或从相机胶卷中选择。 将要求用户根据Prisma的尺寸限制来裁剪图像。 然后,他们最多可以选择33个滤镜,例如印象,马赛克,哥特式图层或其他滤镜。 “ PRISMA将继续在即将到来的一周中增加新的滤清器-Moiseenkov! 莫伊森科夫(Moiseenkov)在Facebook上发布了360度图像,实际上提供了Prisma编辑过的照片的概况,以及关于如何轻松将滤镜添加到照片的会议。 他说,视频很容易表达自己,但是艺术品的筛选非常复杂。

使用SVG在iOS应用中实现分辨率独立性

拥有各种尺寸的设备非常适合允许用户选择适合自己的设备,但是支持分辨率和像素密度的所有这些组合可能很麻烦。 即使您以某种矢量格式开发所有原始图稿,通常也必须以各种尺寸和密度将其导出为PNG格式。 如果您的应用程序中只有几个图像,这可能是可管理的,但是随着图像数量的增加,它很快就会变得笨拙而乏味。 另外,如果您有任何全屏(特别是iPad尺寸)图像,则以多个密度包含同一图像的冗余副本将迅速增加应用程序的总体存储空间需求。 另外,您也可以直接在应用程序中使用矢量图像。 此时,Xcode支持的唯一矢量格式是PDF。 您可以将PDF添加到资产管理器,它会按预期显示在Interface Builder中。 但是,在构建应用程序时实际发生的事情是,这些漂亮的矢量图像在编译时就被光栅化了。 因此,在运行时,您仍在处理固定大小的PNG图像。 这意味着您仍然受制于多个冗余映像的空间开销。 而且,如果您的应用在运行时对图像大小执行任何操作,您仍然会注意到一些像素化。 这就是SVG出现的地方。 救援的SVG 如果您还不熟悉SVG,它是一种基于XML的矢量图像格式,这意味着即使与PNG相比,它的文件大小也相对较小。 作为矢量图像,它仅包含用于重绘图像的指令,而不包含实际的图像位图数据。 只需说一句,您只需在应用程序中包含一个SVG副本。 这可以大大减少应用程序的存储需求,并简化应用程序图稿的管理。 由于Xcode不支持SVG,因此您需要找到第三方库才能将SVG支持添加到您的应用中。 我在最新的iOS项目中一直使用的是SVGKit。 它具有一个缓存系统以减少解析SVG文件的开销,并且它使用CoreAnimation层进行渲染以避免大多数性能问题。 使用Interface Builder进行布局 如果要使用Interface Builder设计布局,则可以为SVG添加图像视图,但是直到运行时才能看到图像。 由于Xcode和Interface Builder不直接支持SVG,因此,我们将不得不采用一个小的解决方法。 1.在Interface Builder中,将新的View对象添加到您的界面中(这在可用对象列表的结尾附近)。 2.像往常一样将此新视图约束到其他视图。 使用矢量图像的好处是您可以灵活选择尺寸。 但是,我仍然建议添加与源图像的宽高比匹配的宽高比约束。 这将防止图像因其他约束而失真。 3.将视图的类更改为SVGKFastImageView 。 这不会影响其在设计时的外观,但是当在运行时加载笔尖时,视图将是此类的一个实例。 4.将IBOutlet添加到视图控制器类,并将其连接到在步骤1中添加的视图。 5.用代码将所需图像加载到视图中。 例如: 请参阅完整文章中的代码。 使用代码进行布局 如果要通过在代码中构造视图对象来设置界面,则该过程可能与您已经在做的事情有点相符。 这样的事情将为您提供SVG图像视图并将图像加载到其中: 请参阅完整文章中的代码。 尽管上面的代码可以工作,没有任何限制,但是图像将根据SVG的内部尺寸进行调整。 因此,您仍然需要添加一些约束来控制图像大小。 如果您要添加更多其他相同的具有不同大小的图像视图,则可以看到图像可以缩放而不会降低质量: 其他提示 如果发现加载SVG图像时布局变得混乱,请尝试使用抗压缩性和内容优先的图像视图。 通常可以将它们设置为1(最小值),以确保图像视图仅从其他约束中获得其大小,而不从其固有大小中获得。 最后,由于我项目中的SVG混合了明暗,大大小小的等等,因此尝试在Finder中预览不是一件容易的事。 因此,我使用以下脚本来生成一个HTML页面,其中包含当前目录中所有SVG图像的预览。 随意使用它,并根据需要对其进行调整! 请参阅完整文章中的代码。

团队合作使梦想成真

或者,是编译C程序的四个阶段。 编译C程序是一个多阶段的过程。 该过程可以分为四个单独的阶段:预处理,编译,组装和链接。 传统的C编译器通过调用其他程序来处理每个阶段来协调这个过程。 由于眼见为实,因此我将使用以下程序来说明该过程的每个步骤: #include 整型 主(无效) { puts(“你好,霍尔伯顿!”); 返回0; } 该程序将称为hello.c。 预处理 编译的第一阶段称为预处理。 在此阶段,预处理器将以#字符开头的行解释为预处理器命令。 在解释命令之前,预处理器会进行一些初始处理。 这包括连接连续的行(以\结尾的行)和去除注释。 要打印预处理阶段的结果,请将-E选项传递给cc : gcc -E hello.c 在此步骤中,预处理器转到上面程序顶部一行中提到的头文件,并将其与hello.c文件的内容连接在一起。 #1“ hello.c” #1“ ” #1“ ” #1“ /usr/include/stdc-predef.h” 1 3 4 #1“ ” 2 #1“ hello.c” #1“ /usr/include/stdio.h” 1 3 4 #27“ /usr/include/stdio.h” 3 4 #1“ /usr/include/features.h” 1 3 4 #374“ […]

我最喜欢的GIF应用功能:Vhoto(iOS)

Vhoto是应用程序中的一颗明珠,原因有很多,但我最喜欢的功能是它声称如何拉动某些静止图像或“亮点” 从您的视频中。 尽管这不是直接创建GIF的功能,但它确实是一项有用的功能,并且可以很好地在我测试过的视频中使用。 这个应用程式的另一个我最喜欢的地方是,它会自动产生几种不同的媒体,从所谓的“顶级GIF”到更快,更慢的视频版本,当然,该应用程序最初的承诺是找到大量静止图像。视频中的精彩片段。 由于野外的GIF类型动画很少采用GIF文件格式(例如Instagram),因此我感谢Vhoto允许将您的作品既作为视频文件又作为GIF文件保存到相机胶卷中。 但是,当您另存为视频时,您显然会丢失可能已进行的任何播放调整…即,您刚刚制作的超级慢动作剪辑只能在慢动作中以GIF格式查看。 视频文件将仅以捕获时的速度播放。 想到任何GIF创建工具都不允许您另存为视频似乎是幼稚的(或者比其时间😉早了很多),而在最坏的情况下彻头彻尾地考虑不足。 想到任何GIF创建工具都不允许您另存为视频似乎是幼稚的(或者比其时间😉早了很多),而在最坏的情况下彻头彻尾地考虑不足。 这种魔术 -策划大量您拥有的图像和视频-是许多服务的目标(例如Google Photos,Polarr的Picky应用,Magisto和Picjoy)。 但是,Vhoto的关注点仅集中在单个视频剪辑的精选集上,这一事实使该应用程序变得更加有用。 因此,只要Vhoto仍可在最新版本的iOS上运行,它将在我的主屏幕上始终占有特殊的位置。

使用CircleCI测试和部署iOS应用

在Atomic启动新的新项目时,我们总是问自己有关测试和部署工具的问题。 CircleCI在移动和Web应用程序方面都非常幸运,因此当我发现CircleCI有适用于iOS的解决方案时,我很高兴能够利用它。 在这篇文章中,我将回顾如何在您的iOS应用程序中使用CircleCI,并说明如何处理CI和轻松部署道路上的一些障碍。 那么,CircleCI是什么? 简而言之,它是用于持续集成和部署的软件即服务平台。 我使用CircleCI的目标有两个: 持续集成测试,而无需自己维护服务器 使用TestFlight为我们的内部测试人员轻松部署 我跟随这篇出色的博客文章解释了CircleCI的启动和运行过程,并强烈建议有兴趣尝试CircleCI的iOS开发人员使用它。 接下来是关于我在CircleCI上部署新应用程序时的进度的分步日志。 1.创建一个帐户 登录到CircleCI并注册。 我们使用了最基本的OS X层服务器,每月费用为40美元。 您可以在此处找到完整的定价信息。 登录并将OS X存储库添加到CircleCI帐户。 他们与GitHub完全无缝集成。 2.分享您的Xcode方案 在Xcode中,确保您的方案是共享的,然后提交更改: 选择“产品>方案>管理方案”。 选择要共享的方案的“共享”选项,然后单击“关闭”。 推零钱。 对于大多数应用程序,您可以只共享您的主要项目方案。 如果仅共享一种方案,CircleCI将自动选择它。 3.创建并上传代码签名证书 CircleCI要求您上载配置文件和代码签名证书。 安装Fastlane工具套件可简化此步骤,并避免麻烦使用Xcode。 要创建签名证书,请运行: $ mkdir证书 $ cert –output_path证书 cert将创建三个文件,包括您需要上传的.P12文件。 同样,请参阅我上面链接的博客文章(我的指示直接来自于此)。 在这一点上,我遇到了第一个问题: 密码(对于foo@bar.com):*********** [09:05:29]:发送崩溃/成功信息。 有关更多信息:https://github.com/fastlane/enhancer [09:05:29]:未发送个人/敏感数据。 仅共享以下内容: [09:05:29]:{:cert => 1} [09:05:29]:证书 [09:05:29]:此信息用于修复失败的工具并改进最常用的工具。 [09:05:29]:您可以通过设置环境变量FASTLANE_OPT_OUT_USAGE = 1来禁用此功能 /Users/foobar/.rvm/gems/ruby-2.2.4/gems/spaceship-0.27.2/lib/spaceship/two_step_client.rb:39:handle_two_step中的[:]太空船目前不支持该推基于2步验证,请同时转换为基于SMS的2因子验证(RuntimeError) 这里发生的是Fastlane的Spaceship工具不支持Apple的基于推式的两步验证过程,因此当我运行证书时,它失败了,我在Macbook Pro上遇到了两步验证挑战。 原来这很烦人-错误消息建议切换到基于SMS的2因子身份验证,但我不知道如何使用AppleID进行此操作。 我采取了这样的方法暂时停用两步验证: […]