Tag: ios

在Swift中学习编程-第166天

很抱歉在100天内从此处删除。 我本来不是打算确切地下车100天,但是我花了大约这么长时间才完成我留在Udacity iOS开发人员Nanodegree中的所有项目。 现在,我仍然有职业发展项目,以便毕业于我的Nanodegree Plus。 我希望在今年年底之前完成这些课程,但是我也一直有时间拿到我的Nano学位(除非Udacity提供扩展)。 无论如何,让我们退后一步,解释一下我最近100天学到的知识。 “在地图上”项目是有关学习如何与服务器端API通信以将数据获取到iOS设备的全部内容。 这非常困难,因为您必须进行身份验证(使用用户名/密码登录),然后将JSON中的数据“转换”为数组或字典。 最难的概念是此过程的异步性质。 您真的不知道服务器响应并向您提供数据所需的时间和时间。 您可能还会向服务器发送多个请求,并且很有可能会收到与发送请求顺序不符的响应,因此必须使用完成处理程序使它们保持顺序。 最重要的是,您必须在后台队列中执行所有这些操作,以便在等待服务器中的数据时不会冻结UI。 之后的项目是虚拟游客。 该项目以我在“在地图上”中学到的知识为基础,添加了“核心数据”,这是一种在iOS设备上存储数据库数据的方法。 这确实很棘手,当我决定切换到Swift 3时,我遇到了很多困难。因为Apple对Core Data进行了许多更改,所以我没有感觉到任何课程材料(在Swift 2.2中)就像我完全迷路了。 我在互联网上搜索了所有资源,以找到有关Swift 3中Core Data的完整教程,最后得到了Ray Wenderlich团队的Swift 3 Core Data书。 RW团队的教学方式是示例性的,因此很容易看到事情的运作方式。 不利的一面(去年我经历了一些iOS教程时就经历了这种方式)是,它们给出了太多的答案,当您从自己的想法中找出来时,您学到的东西不多拥有。 但是这本书当时对我来说是完美的,因为它阐明了苹果公司对Core Data所做的所有更改,并且我可以继续努力。 核心数据最难的概念是并发性。 当您有多个项目试图同时访问(写入或读取)Core Data中的数据库时,会发生这种情况? 如果安装不正确,则很可能会导致随机崩溃。 我对此还没有一个很好的概念,但是我知道每次使用Core Data时,都会添加额外的参数来调试并发问题,并尝试在上下文中执行每个Core Data任务。 如果您不使用Core Data,那么最后一部分可能没有多大意义,但是我不了解该主题,无法全面解释该主题(如果我用枪指着我的头,我可能会更好地解释它,但是我非常希望您阅读这篇文章)。 这样就使我进入了最终项目。 没有更多的学习。 这是关于使用我所学到的一切并将其自己整合到应用程序中。 好吧,没有更多的学习部分是不正确的。 实际上,我最终学到了很多东西,因为当我整理我的应用程序时,最终使用了很多课堂上没有教过的东西(NSFetchedResultsController,UISegmentedControl,UIStepper,UIPickerView)。 我可能会在另一篇文章中介绍我的应用程序,因为我真的应该继续从事我的Nanodegree的职业发展部分,因为这是我注册Nanodegree Plus时的一项要求。 在这一点上,我很高兴我即将结束这一旅程,我将再发表一篇文章,让大家知道我是否完成了我的纳米学位。 PS只是对Apple Watch自动解锁功能的更新,结果证明我使用的是WatchOS 3的Beta版,而自动解锁在Beta中无法正常使用。 我很高兴地说“自动解锁”现在可以正常工作,但充其量只能在大约75%到85%的时间内工作。 尽管我的手表还有另一个更新,但这与我所使用的Apple的标准相去甚远。 它可能会改善自动解锁的性能,但是长达一个小时的更新(我记得有些时候去年才长达4个小时)令人费解,这是Apple真正应该做的事情。

SpriteKit场景—使用didMove加载内容(以查看:SKView)

使用SpriteKit的iOS游戏中的所有内容内容都在SKScene类内。 SKScene是“场景图的根对象”,这意味着您可以近距离观察活动中的树木! 是的 我对SKScene和SKView之间的区别感到有些困惑,但是SKView只是UIView子类。 不太肉! 您可以完成我们的大多数属性分配,并在SKScene didMove(to: SKView)方法中didMove(to: SKView)编程方式进行设置。 以编程方式添加子级 这是最好的方法,因为所有内容都在代码中,但是可能要花很长时间。 如果设计师无法编写代码,您也将无法与他们轻松共享场景。 我喜欢Scene编辑器,因为它提供了很多复杂的选项,例如SpriteKit TileMap和动画,但它并不太复杂,您在编辑器中所做的任何事情都可以用代码完成。 请注意,在这种情况下,SKView不会调用场景编辑器文件,而是会调用GameViewController。

NC宣布出售-iOS上的Notification Center的Twitter小部件

NC宣布出售-iOS上的Notification Center的Twitter小部件 伦敦的Apps Genie Limited今天宣布了NC促销活动-通知中心的Twitter Widget。 该应用程序与iPhone,iPad和iPod touch设备兼容,为用户提供了增强的工具,可在锁定屏幕上或任何应用程序内部查看Twitter时间轴和提及内容。 使用NC,用户可以将此Twitter小部件添加到“通知中心”以随时查看Twitter提要。 在有限的时间内,只有应用程序购物者才能获得NC-通知中心的Twitter Widget,并且可以节省很多。 ******************************************** 英国伦敦-领先的移动解决方案和应用程序开发商Apps Genie Limited今天很高兴宣布推出NC促销活动-iOS通知中心的Twitter Widget,该应用程序的价格将在限定时间内从$ 6.99降至$ 0.99只要。 该应用程序专为在iPhone,iPad和iPod touch设备上使用而创建,为用户提供了增强的工具,可在锁定屏幕上或任何应用程序内查看Twitter时间轴和提及内容。 用户可以将NC Twitter小部件添加到“通知中心”以随时查看Twitter feed。 在有限的时间内,只有应用程序购物者才能获得NC-通知中心的Twitter Widget,并且可以节省很多。 北卡罗来纳州—用于通知的Twitter Widget当前可在Apple App Store上下载,折扣价仅为0.99美元。 超越其他Twitter通知解决方案NC提供了非常简单的集成。 下载应用程序后,您可以切换“今日标签”和“编辑”按钮,以从列表中选择NC。 此外,您还必须授予NC权限才能访问您的Twitter帐户。 应用程序提供2种浏览样式:时间轴和提及。 NC用户可以使用所有Twitter功能,因此他们可以直接从小部件轻松地在默认Twitter应用程序中收藏,转发或打开任何推文。 该应用程序专注于提供完善,全面和令人愉悦的Twitter通知体验,从而确保Twitter用户无论何时何地都可以随时获得指尖,随时可以快速访问其Twitter帐户。 当前在限定时间内仅以0.99美元的价格提供NC – Notification Center的Twitter Widget是管理Twitter的完美方法,因为该应用程序具有直观的设计,简单的设置过程和灵活的设置。 NC —通知中心的Twitter窗口小部件为Twitter通知设置了新标准,并将您的常规Twitter交互变成当今移动领域中最动态的解决方案之一。 Apps Genie Limited位于伦敦,是一家移动应用程序开发工作室,致力于为移动爱好者提供涵盖各种学科和重点的有价值且信息丰富的移动解决方案。 Apps Genie Limited一直致力于为移动受众提供结构合理且有效的应用程序。 (C)Apps Genie Limited2016。保留所有权利。 Apple,Apple徽标,iPhone,iPod和iPad是Apple Inc.在美国和/或其他国家的注册商标。 在App Store上下载NC-通知中心的Twitter窗口小部件,位于App […]

实现UIRefreshControl

前几天我在和朋友聊天,他提到了一些很有趣的事情。 他正在一个项目中,他们根本不使用任何开源代码(即,没有直接依赖项)。 这让我开始思考,如果我在相同的约束下运作,我的项目会是什么样子。 因此,当我最近被要求实施“按需刷新”功能时,我认为我可以在不咨询开源霸主的情况下试一试。 总览 实现可刷新的样式刷新控件,该控件可以附加到UITableView上,而不会泄漏太多实现细节。 需要使用可响应状态更改的文本和图像进行自定义。 源代码可以在这里找到。 由于很快就把它放在一起,所以还没有经过充分的测试,但是似乎可以正常工作。 如果您有任何改进方法,请告诉我。 第一站,UIRefreshControl 我在这里写了很长的篇幅谈论股票更新控制,但是我看到了它们的利弊时选择了: +易于使用,可直接放入解决方案 –难以定制 –非全萤幕检视画面上的视觉错误,例如跳动的动画 如果您对股票动画没问题,正在使用全尺寸的表格视图以及使用UITableViewController,那么这将是一个完美的控件。 不幸的是,这些都不适用于我试图做的事情。 在使用UIRefreshControl进行了一些修改之后,我放弃了自己的程序并推出了自己的程序。 我真正喜欢的是Apple的刷新控制界面。 它们仅公开一个动作(UIControlEventValueDidChange)和一组方法(beginRefreshing和endRefreshing)。 这使得管理表视图编码时如何与控件交互以及将所有实现精巧地保留在刷新控件本身中变得非常容易。 因此,我从他们的设计中得到了启发,以启发我自己的版本。 但是在我们开始之前 UIRefreshControl如何工作? UIRefreshControl的核心极其简单,但与其他所有细节一样,魔鬼也是如此。 我无法确切地说出苹果实施的工作原理,但我必须想象流程如下。 要记住的关键是我们将使用tableView子类的scrollView —因此,当我在下面引用tableView时,它实际上是其scrollView超类的属性。 观察tableView内容的偏移量 当contentOffset.y> pullDistance时,触发刷新 调整tableView contentInset和contentOffset以解决以下状态: 默认值(用户完全没有与tableview进行交互) 拉(用户已拖动表格视图,并且控件尚未完全显示) 拉动(用户已拉动表格视图,并且控件已完全显示,但尚未达到刷新距离) 拉动和刷新(用户已拉出足够的距离以达到刷新距离) 已发布(用户在刷新距离之前已释放表) 已发布(用户在刷新距离后已释放表) 我们实际上并不会专门针对所有这些状态进行编程,但是最好记住控件将负责处理哪些状态,并为我们提供如何对这些状态做出反应的良好框架。 另一个有趣的地方是来自Apple的文档:“拥有刷新控件的UITableViewController对象还负责设置该控件的框架矩形。 因此,您不需要直接在视图层次结构中管理刷新控件的大小或位置。”因此,我们将尝试做同样的事情,并使它对于最终视图控制器尽可能地无缝。 自定义刷新控件 设置此控件将是了解滚动视图的contentOffset和contentInset如何工作的问题,然后如上所述适当地调整为不同的状态。 让我们遍历每种状态并了解视图的外观,以便我们对需要做的事情有很好的了解。 内容偏移 苹果将​​其描述为“内容视图的原点与滚动视图的原点之间的偏移量”,这实际上是很有意义的。 contentOffset只是任何滚动视图上的一个属性,它是一个精确描述了此CGPoint的属性。 contentOffset可以告诉我们用户将滚动视图从其原始位置拖动(或偏移)了多远。 该点将从(0,0)开始,并在您向下拖动滚动视图时,偏移量将开始增大(0,-1),(0,-2)。一直到用户拖动的程度。 回想一下,负数表示用户在视图上向下拖动。 因此,这样做的目的是提供一种简单的方法来查看滚动视图被拖动到多远,并且一旦有了,我们就可以通过执行类似这样的操作来响应contentOffset.y。 我们使pullDistance保持正值,以便以后使用时更容易。 -(void)scrollViewDidScroll:(UIScrollView *)scrollView […]

滑动过渡和快速浏览– Christian Tietze –中

(在https://christiantietze.de/posts/2017/01/reswift-swipe-transitions/中阅读格式正确的故事) 在昨天的一次客户会议上,我们尝试找出当ReSwift是应用程序状态的唯一真实来源时,如何通过向左/向右滑动来为场景过渡设置动画。 应用进入什么状态? 您如何制作动画? 出于某种原因,转换百分比是否应该成为应用程序状态的一部分? (剧透:没有) 滑动首先具有挑战性,因为从视图控制器A到B的这种交互式过渡需要同时显示两者:滑动时,需要在视觉上“拖动” B。 添加自定义导航控件时,最终会得到一个主视图控制器,该控制器包含一个子视图控制器以显示实际的表视图(下图中的绿色框)。 这些表格视图应从左侧或右侧刷入并触发导航更改。 在此示例中,用户看到给定日期的数据。 她应该使用滑动和导航按钮自由导航到前一天和后一天,直到时间的开始或结束。 (或我们的数据限制,以先到者为准。) 让我们分析一下实现这一点。 单状态替换,无过渡 在没有过渡的静态世界中,只有导航栏的“上一个”和“下一个”按钮(以蓝色表示)会触发导航更改:您点击该按钮,请求来自服务器的新数据,也许您会显示一个加载指示器,然后替换UITableDataSource的内容。 现在,如果您使用ReSwift,则当前可见的数据集合将成为您应用状态的一部分。 保持简单,表格视图的单元格将显示文本。 状态看起来像这样: struct AppState:ReSwift.StateType { var内容:[String] } 想象一下,您有一些动作,减速器以及对导航更改做出的适当反应。 (这本身可能是一个挑战,并且可能是另一天的话题。提示:您将需要“更改日”操作来触发网络请求,并需要“替换数据”操作来更新内容。) 为了显示最新状态更改,您设置了一个Presenter,它是ReSwift.StoreSubscriber。 当您从服务器接收数据并替换AppState.contents时,将调用newState回调。 然后,此字符串数组将传递到用户界面进行显示。 我们将该方法称为updateView(linesOfText :)。 这是一个体系结构上的注释: updateView(linesOfText 🙂方法,我想要演示的调用者应该由主视图控制器公开。 反过来,这可以委派给其当前的子视图控制器,该控制器处理表的实际显示。 但是,从长远来看,将表示者(表示层(!)外部的服务对象)耦合到子视图控制器可能会对您造成伤害。 主视图控制器是整个组件的外壳,因此它负责公开可用的接口。 内部组件的数量和对其的委派是其他对象不关心的实现细节。 (您一会儿就会明白为什么。) 此设置非常简单。 AppState更改通过Presenter的流程,该Presenter会在必要时创建视图模型,然后将其传递到其视图组件。 结果,UITableView重新加载了新数据,您就完成了。 那是最准方法。 在添加交互式过渡之前,让我们首先使其具有更高的响应速度。 现在,每次点击按钮都会触发一个网络请求,该请求使用户的交互停止。 “走走走走”导航在孩子们中并不普遍,因此我们将在下一步中预取隔天的数据。 预取相邻天的数据 在表示层中,我想象情况会有所变化,如下所示: 从上面对简单方法的更改是: 主视图控制器具有3个子视图控制器,而不是1个。所有子视图控制器均已准备就绪,可以显示。 轻按按钮现在有两件事:像以前一样触发“更改日”导航操作, 并立即将正确的子视图控制器放在顶部。 为了使所有这些成为可能,Presenter组装了一个具有3个内容数组而不是1的ViewModel。 视图模型仍然非常简单: struct […]

2274.US BLACK打印

自1989年以来,没有人能做得更好 应用 创建应用并提交版本 上传版本 编辑App Store详细信息 管理促销代码和促销艺术 管理TestFlight构建 管理TestFlight测试人员 查看崩溃日志 编辑应用定价和可用性 管理iAd 创建应用内购买 提交应用内购买 编辑应用内购买 管理游戏中心 管理排行榜分数 查看应用分析 查看销售和趋势(所有报告和主要内容) 提供者: 管理用户和角色 管理应用程序访问 管理沙盒测试器 管理协议,税收和银行业务 签署协议 查看付款和财务报告 目录报告 实时按需协作

从概念到发布🚀:我如何在卧室中构建SpareDesk并将其发布到全世界。

独奏企业家面临的最大问题之一实际上是推出一些东西。 我们有很多很棒的想法,有时还有更多的半成品项目和废弃的GitHub存储库。 我对此一直感到内gui。 从我12岁起就开始编程,尽管这些年来我已经完成了许多客户项目,但从概念到发布,我始终没有想到自己的想法。 我从没想过要当程序员,也没有兴趣自己做,但是我从来没有那样做。 相反,我只是构建了“无用的”项目,所以我可以学习。 经过近一年的工作,今天,我们推出了SpareDesk,这是一个面向企业家,自由职业者和数字游牧民族的全球市场,可以立即找到工作和预订的空间,从而使他们能够继续做自己最擅长的事情。 尽管SpareDesk并不是第一个尝试成为“随需应变的桌面空间”的家喻户晓的产品,但我相信我们在与全球共享办公空间合作以及创造卓越的用户体验方面对细节的关注使我们处于占据优势的良好位置这个市场。 这个概念: 我在2015年初注册了sparedesk.co域名。最初的概念是目录样式的网站,您可以在其中搜索附近的地点。 共享工作空间需要支付订阅费以列出其空间,从而从中获利。 实际上,我为此构建了一些原型,尽管我对经营这种业务并没有感到兴奋,最终我再也没有继续做下去。 SpareDesk被我其他遗弃的想法搁置了。 2015年5月,我和一个朋友周末从伦敦去柏林。 当时,我刚刚启动了SpareDesk的iOS版本(现在是iOS版)的早期版本(我当时写的笑声就像我告诉他的那样,这将是一个快速的项目,并将在几周内完成) 。 几年前,我自学了Objective-C,并且需要一个项目来帮助我深入Swift的世界。 我们在四处寻找工作的地方徘徊,在我们的脑海中回想着如果有SpareDesk帮助我们在某个地方找到工作将会有多大。 我们最终使用了另一个提供众包空间数据库的应用程序。 不幸的是,我们去的第一个地方已经关闭(尽管此应用程序说它是打开的),而第二个地方已经关闭并在几个月前搬家了。 从浪费了几个小时,到出现了这些痛点,我巩固了现在SpareDesk的概念。

使用Ruby进行iOS开发

从RubyCocoa到MacRuby Hisakuni Fujimoto于2001年开始开发RubyCocoa框架,这使使用Ruby创建基于Mac OS的基于Cocoa的本机应用程序成为可能。 Cocoa是Apple的API,用于在macOS上构建应用程序。 它发展很快,几年后,苹果开发人员Laurent Sansonetti加入了提交者。 苹果在2008年宣布MacRuby将很快发布,并将取代RubyCocoa。 有趣的是MacRuby是开源的,这对Apple来说是罕见的。 2008年3月,第一个版本发布。 MacRuby使用Ruby 1.9和LLVM编译器(用C ++编写的编译器)和受支持的Interface Builder(XCode)。 开发过程一直持续到2012年,直到苹果对此失去兴趣,洛朗·桑松内蒂(Laurent Sansonetti)离开了公司。 RubyMotion 劳伦(Laurent)离开苹果后,他创立了自己的创业公司RubyMotion。 RubyMotion是一组用于在Ruby中进行iOS开发的组件,其中对象模型是使用Objective-C运行时(运行时在编译器中用来实现语言中内置的函数的库)来实现的 ,因此在创建类,对象或对象时一个方法,您正在使用Objective-C对象,类或方法的相同运行时实现。 因此,您无需使用任何中间件就可以访问整个iOS API。 最后,设备采用了Objective-C和Ruby运行时,其中Ruby实现运行时是静态链接的,大约为1Mb。 它包含所有现有的类,例如String,Aray,Hash等,并且还实现了Objective-C中不存在的所有Ruby功能,例如mixin(模型)或将实例变量动态设置为Class。 RubyMotion还具有静态编译器,可将Ruby立即编译为优化的机器代码。 咱们试试吧! RubyMotion项目基于Rakefile。 “ app”目录包含应用程序代码。 “资源”目录将包含项目的资源文件,例如图标,图像或声音文件。 “ spec”目录包含规范/测试文件。 让我们尝试一下RubyMotion提供的示例之一-TicTacToe。 …而且有效! 链接 RubyCocoa,MacRuby,RubyMotion 与Laurent Sansonetti一起了解RubyMotion – SitePoint 直到去年4月,Laurent Sansonetti凭借RubyMotion吸引了整个Ruby社区的想像力…… www.sitepoint.com

初级iOS开发人员

一周前,我加入了Bookmate iOS团队。 简而言之,这是一个非常愉快的一周。 这就是为什么我会告诉你的。 第一天 第一天有点特别。 我真的很紧张,因为这是我的第一份正式工作。 我来得比预期的要早。 首先,好的HR Karina向我展示了整个办公室,并且收到了一本不错的Macbook。 我遇到了我的所有队友Artem和Konstantin。 是的,团队规模很小🙂我们通常在露天场所的一张桌子上工作。 我在工作中所做的第一件事是建立工作环境。 那是很普通的事情:我连接到闲暇,公司电子邮件和其他东西。 然后Artem建议我安装SourceTree。 它实际上是一个很酷的工具。 真的很有用。 在那之前,我是命令行的狂热者,因为它使您看起来像是专业人士;)几天后,我意识到便利已胜过冷静🙂现在,SourceTree在我的必备工具列表中。 我们还使用Jira。 谢谢,Atlassian。 我以前没有使用过相同类型的软件,我的意思是错误跟踪软件。 因此,我无法将其与其他工具进行比较。 也许只是在Facebook上进行简单对话即可:)因此,Jira更加方便😀 我还想提到我不是git的大师。 只需提交推送,提交推送,提交推送-我就是git。 所以首先,我真的很担心我在git中可能会犯的错误。 如果我删除必不可少的内容怎么办? 强行推? 我真的需要这样做吗? 听起来很危险;)变基了吗? WTF ?! 我需要提及的是,我真的很想加入Junior的队伍。 我可以随时问愚蠢的问题-无论我想要什么。 我很确定它将提高我的学习速度。 这就是为什么我问几乎所有问题时都​​会有点烦恼的原因:)但是,伙计们,我还很初级!:DI可以,我会的! 如果我是中级开发人员,我会在Google上搜索所有内容,并花更多的时间。 因此,不要害怕以低级的身份加入一个团队—能够惹恼人们很有趣:) 任务呢? 我已经用水龙头修复了一个小虫子。 我只走了几行:)但是,无论如何,我还是被要求在这些行中进行更改:)他妈的空格人🙂我没有安装SwiftLint。 所以我错过了几个空格:)但是拉请求被接受了! 下一项任务是一个很大的任务。 这是一个非常酷的任务。 我更喜欢复杂的任务,因为我相信它们确实可以提高我的技能。 任务是为无法使用的书籍开发自己的小部件。 不幸的是,我第一天还没有完成。 但是今天,您可以下载Bookmate应用,并在不可用的书本视图中查看我的小部件! 我在队友面前离开办公室感到不舒服,所以我也只有在他们回家后才离开。 在第一天,我什至没有喝一杯水,因为我完全专注于任务。 第二天及以后 我会做尽可能多的任务。 这是我成长为iOS开发人员的方式:)我真的希望很快成为这一领域的专家。 第一周我关闭了大约10个问题。 我曾与我们的设计师讨论过3次有关应用程序的详细信息。 […]

我如何在iOS上发现Instagram即将推出的视频通话功能

昨天,我设法在Instagram上获取了一些视频通话UI的屏幕截图。 这就是那件事的故事。 我认为该过程的描述对于对逆向工程感兴趣以发现隐藏特征的人将非常有用。 它总是始于谣言或其他发现。 昨天,我们在9to5mac上发布了一个故事,讲述某人在Instagram的Android应用中发现了与进行视频通话相关的资产,而该功能是Instagram目前不提供的功能。 那吸引了我的注意力,我想知道是否可以在iOS上找到相同的东西。 注意:9to5mac帖子中嵌入了我由以下所述过程引起的有关iOS功能的推文,请记住,它最初是针对Android的谣言。 我做的第一件事是使用iMazing从App Store下载Instagram的IPA。 您可能已经知道,IPA文件只是一个zip文件,因此要提取其内容,只需将扩展名从.ipa更改为.zip。 我在Instagram.app包中查找了可能指示视频通话功能的所有资产。 可以使用Spotlight或在终端中使用find命令来完成。 自然,我寻找名称中带有“ videocall”或“ videochat”的文件,但找不到任何东西。 然后,我使用Asset Catalog Tinkerer打开Assets.car文件,并在其中查找任何内容。 由于搜索资产并没有取得成功,因此该研究二进制文件了。 我们正在谈论的是App Store应用,因此第一步是解密二进制文件。 与Apple的内置应用程序不同,从App Store下载的应用程序的二进制文件经过加密,并且只能在iOS设备上运行时才能解密,此过程只能越狱。 因此,我得到了方便的越狱iPhone 5S,将其连接到它,然后继续对该应用程序进行解密。 在越狱设备上解密二进制文件的过程如下: – SSH进入越狱设备 –运行目标应用 查找目标应用程序的PID: 使用bfinject将解密dylib注入目标进程,然后等待该进程完成: 之后,我使用netcat在Mac上下载了解密的IPA: 然后我将其重命名为.zip并从Payload文件夹中提取Instagram.app: 好的,现在我有了一个解密的Instagram版本,求你了! 我通常首先将二进制文件加载到Hopper中,但是Instagram的可执行文件高达50mb(!),因此我知道解析和反汇编将花费很长时间。 考虑到二进制文件的大小,我决定先进行字符串搜索,然后再对找到的内容进行跟踪。 请记住,在这一点上,我不确定我什至找不到任何东西,因此,花费所有时间(和CPU功率)分解二进制文件却一无所获是没有道理的。 从二进制文件中提取字符串是这样的: 这仅在解密的二进制文件中可行,因为加密版本将仅提供无意义的垃圾。 注意,我通过管道将strings命令的输出进行排序,然后将其输出到名为Instagram_34.txt的文件中。 我这样做是因为,如果需要的话,以后可以在版本之间进行区分。 排序意味着要比较的两个文件将更稳定,从而导致比较有用的差异。 对文件名进行版本控制意味着我始终知道字符串来自哪个版本。 在这种情况下,这是没有必要的,因为我没有做任何比较,但是在将来Instagram发布新版本并决定检查更改后,这可能会很有用。 准备好字符串文件后,就可以在该文件中搜索可以指示视频通话功能的内容。 抓取“视频通话”后发现: 只是摘录,还有很多其他的“视频通话”字符串。 因此,现在我知道他们肯定正在开发某种视频通话功能。 我可以在这里停下来,发布此消息并入睡。 但是,如果我可以实际运行该视频通话代码以观看实际操作该怎么办? 🤔 运行代码 要在我无法控制的应用程序中运行任意代码,我可以附加一个调试器然后从那里去,但这并不有趣,所以我决定使用Cycript! Bfinject内置Cycript: 现在,我可以将Mac上的Crycript控制台连接到我的iPhone […]