Tag: ios

[iOS] WKWebView(而不是UIWebView)

在UIWebView中进行浏览。 심지어로자바스크립트파사파리에다리다。 WWDC 2014将使用WKWebView,AppKit,WebView,UIKit,UIWebView,API和Webview。 60fps스크롤링,빌트인-제스처,App-WebPage커뮤니케이션을제공한다。 UIWebView和WKWebView和2位用户。 在UIWebView和UIKit中,导入import필요하다。 그래서接口构建器사용할있다。 W다음,WKWebView javascriptjavascript최적화를로프스세다。 Web UIWebView보다빠르고이다。 iOS,iOS 8에서本地文件을로드하는데,가가지고다。 iOS 9에서정된사항이다。 아래의에서이점은아래의URL에서능하가능하다。 WKWebKit框架 WKBackForwardList —图库照片 WKBackFowardListItem —后退리스트에페이지 WKFrameInfo —在frameframe中添加정보를 WKNavigation —웹이지로딩을정를정보를포함 WKNavigationAction —动作导航유발하는动作정를 WKNavigationRespoonse —导航 WK首选项—웹뷰의정설 WKProcessPool —池中的池 WKUserController —用户脚本的用户指南 WKScriptMessage — K이지로보낼지의정보를 WKUserScript —크립트스지크립트스크립트 WKWebViewConfiguration —属性列表集合 WKWindowFeatures —图库照片 通讯协定 WKNavigationDelegate —主/副框架加载정책과主机导航과정을메소드를공공 WKScriptMessageHandler —웹페스에스크립트지를제메소드 WKUIDelegate —在本机UI中进行操作 Javascript —本机通信 讯息处理常式 Web消息处理程序。 […]

致力于React Native初学者〜从零开始React Native

致力于React Native初学者 〜从零开始React Native 拥有Mac机器。 从计算机上的App Store安装Xcode。 是的,您可以安装最新的 安装节点 下载链接-https://nodejs.org/en/download/ 将其安装在您的机器上 打开terminl并输入“ npm -version”将类似于5.xx [其中x是> 0的整数] 键入此命令以转到4.6.1稳定版本“ npm install -g npm@4.6.1” 打开terminl并输入“ npm -version”,它将显示4.6.1。 安装守卫 当心〜如果您不安装watchman,然后再运行“ npm start”,它将显示错误消息,例如 无法启动服务器,请运行以下代码段:sudo sysctl -w fs.inotify.max_user_instances = 1024 sudo sysctl -w fs.inotify.max_user_watches = 12288 建立专案 打开终端 输入commad“ npm install -g create-react-native-app”。 这将安装create-react-native-app,在创建项目的任何路径上都可以使用 在终端上,导航到要在其中创建本机项目的路径 键入命令“ create-react-native-app MyFirstRNProject”项目这将创建一个新的React Native Project,其文件夹名为MyFirstRNProject 运行项目 […]

iPad和iPhone技巧—从Goodreader应用程序共享#PDF

通过#iOS设备进行文档管理 我最喜欢的移动文档管理应用程序是GoodReader(iOS应用程序商店链接),我已经使用8年了! 这是有关通过应用程序和“拼合”注释共享PDF文档的快速提示( 如果收件人不需要进行更改(例如,如果您签署文档并一起转发 ),请始终执行此操作 )。 这是邮寄PDF的方法 1 —在GoodReader中打开PDF 以下步骤显示了处于活动状态的“浮动菜单”。 通过点击屏幕中央可以“激活”此功能(点击屏幕将菜单切换为ON和OFF-FYI)。 2 —点击屏幕底部的共享按钮 出现“选择动作”菜单。 选择所需的选项-就我而言,我想通过电子邮件发送PDF。 注意:如果对文档进行了广泛的注释,则可能需要选择“电子邮件文件+摘要”。 这将与文档一起发送对文档所做的所有注释的摘要。 在正确的情况下非常有帮助! 3-必要时展平注释 通常,您希望使注释变平(这使标记成为文档的一部分,而不是单独的“层”)。 这将确保收件人可以“看到”文档上的注释。 如果您不这样做,则根据收件人查看PDF的方式,可能不会显示它们。 4 —发送文档 而已。 收件人将通过电子邮件收到您的文档。

使用Xamarin工作簿的自定义Xamarin.iOS UILabel属性

需要一种在UILabel中自定义某些文本的方法,并决定在玩Xamarin Workbooks的同时进行快速发布。 为了自定义UILabel中的某些文本,您首先需要找到其范围。 为此,使用要显示在UILabel中的文本创建一个新的NSMutableAttributedString: var mutableStr = new NSMutableAttributedString(“我的测试字符串。”); 接下来,找到您要自定义的文本范围。 在此示例中,我们将找到“测试”的范围,并应用两个属性,颜色+字体大小/粗体。 可以使用我们的可变字符串通过以下方式定位范围: var range = mutableStr.MutableString.LocalizedStandardRangeOfString(new NSString(“ test”)); 现在我们找到了范围,剩下的就是应用属性。 第一个属性是蓝色前景色: mutableStr.AddAttribute(UIStringAttributeKey.ForegroundColor,UIColor.Blue,range); 接下来,让字体变为粗体并将其增加到30号: mutableStr.AddAttribute(UIStringAttributeKey.Font,UIFont.BoldSystemFontOfSize(30),range); 属性更改后,剩下的就是设置标签的属性文本,并且由于我使用的是Xamarin Workbooks,因此呈现UILabel。 var label = new UILabel(new CGRect(100,100,300,100)); label.AttributedText = mutableStr; RootViewController.View.AddSubview(label); 这是我的工作簿UILabelAttributedText.workbook的链接:https://app.box.com/s/bmg93cujthsbka5v99lzfitrn0ijfts5 Xamarin Workbooks很有趣,确实为我节省了时间。 我不必创建控制台应用程序来测试概念和较小的更改,例如上面的示例。 所有这些都是在Windows和Mac联网的Windows上完成的。 编码愉快!

如果您不知道使用Objective-C在做什么,则为React Native动态更新Javascript资源

对于正在工作的项目,我正在创建一个React Native应用程序。 React Native的好处是您可以从远程服务器加载javascript包(可以说是应用程序的大脑)。 这意味着您可以进行更新和更改,而无需经过App Store批准过程。 不利的一面是,在应用程序实际加载之前,需要一两秒钟的时间来加载捆绑软件。 除非您有一些花哨的Objective-C或Swift“加载”动画,否则它只会显示白屏。 我没有iOS编程方面的经验,所以我决定做第二件事-从设备本地加载捆绑软件。 我能够整理本指南中的大部分内容,但其中一些我必须自己弄清楚。 所以你想动态更新你的React Native App 在工作中,我们最近在应用程序中发布了第一个React Native组件,并且我一直在考虑如何(以及是否… medium.com) React Native为您提供了将JS捆绑软件存储在应用程序捆绑软件中的选项,这几乎为您提供了即时的加载时间。 我可以使用该机制来做我想要的。 首先,我需要检查是否有下载的JS捆绑包,或者是否需要使用应用程序的捆绑包: //这是应用程序本身的文档目录。 NSString * documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject]; // filePath代表下载的包所在的位置。 它位于应用程序的documents目录中。 NSString * filePath = [documentDir stringByAppendingPathComponent:@” main-loaded.jsbundle”]; NSURL * codeLocation = [NSURL URLWithString:filePath]; //如果执行路径中没有文件,则使用应用程序包 如果(![[NSFileManager defaultManager] fileExistsAtPath:filePath]){ //加载应用程序包的javascript jsCodeLocation = [[NSBundle mainBundle] URLForResource:@“ main” withExtension:@“ jsbundle”]]; […]

适用于iOS的11个最有用的旅行应用

在21世纪出行带来了更多的问题,“我应该使用哪个旅游网站?”比“我应该去哪里?”的时代来临,在拥有可用于所有应用程序的智能手机时代,应用程序也将接管一切也就不足为奇了。旅游行业。 在开始下一次冒险之旅之前,请先查看这些应用。 Google旅行 使用Google Trips将所有旅行信息保存在一个地方。 将您的所有预订打包到一个捆绑包中,以方便访问,并使用“轻松旅行计划器”功能逐日计划您的旅行。 如果您不知道要做什么,Google会从当地人那里收集关于去哪里和做什么的想法,从而消除您计划行程的猜测。 孤独星球指南 这个程序是您前往世界上50个最热门旅行目的地的终极资源指南。 指南提供了由当地专家策划的城市指南,离线地图,活动过滤器,短语手册,可以像当地人一样说话,还提供了有用的书签功能,可以帮助您组织旅行。 航班统计 Flight stats是全球任何航空公司和机场的实时机场和航班跟踪器。 通过航班号,机场或航线轻松访问任何航班。 您还可以在互动地图上浏览航班。 Apple Watch功能可让您在连接之间穿越机场时检查航班的航站楼和登机口。 谷歌翻译 Google翻译是一款直观的翻译应用,可以在您键入时翻译103种不同的语言。 使其与其他翻译应用程序区分开的一些功能是能够从相机上拍摄的照片进行翻译,对话的双向翻译以及在屏幕上绘制的符号的翻译。 我周围 “我周围”使用您的GPS位置来帮助您找到您周围的企业类型。 该应用程序最初用于餐厅,但此后已扩展到咖啡店,银行,酒吧,加油站,医院,酒店,电影院,超市,剧院和出租车公司。 每个类别中的结果都会根据每个位置与您的位置之间的距离显示在交互式列表中。 Wiffinity Wiffinity允许您访问全球超过40万个Wi-Fi网络及其登录信息。 用户每天都会更新该数据库,这意味着您在寻找最近的咖啡店时就不必担心漫游。 可用的网络将显示在地图上,连接时就像在旅途中单击它们一样简单。 尤格勒 与孩子们一起旅行可能会令人不知所措,尤其是在寻找使他们保持娱乐的活动方面。 有了Yuggler,您将永远不必担心为任何年龄的孩子找到适合做的事情。 搜索您附近的活动,与其他用户合作以分享他们的经验,直接分享到社交媒体以及为将来的用户查看活动。 Yuggler声称是App Store上最受欢迎的家庭应用程序,并且Parents’Choice和Webby的奖项提供了有力的证据来支持这一主张。 TripIt 永远不要搜索您的电子邮件收件箱以再次查找预订。 通过将所有确认电子邮件转发至plan@tripit.com,轻松组织整个行程。 然后,每笔预订都将在主行程中添加到应用中,以便您可以从一个位置访问它们。 将TripIt与您的日历同步,以便您的预订显示在您计划的其他任何活动旁边。 伴侣 对于大多数人来说,独自一人或与一小群人一起去新城市是一件相当恐怖的事情。 伴侣的目标是使您安全地到达目的地。 在应用程序中输入目的地,然后选择几个联系人作为您的伴侣,直到您到达为止。 如果您感到受到威胁,可以用手指轻按两下以通知您的同伴或致电当地政府。 城市地图 永远不要再为新城市中复杂的公共交通系统感到不知所措。 使用Citymapper,您可以选择目的地,该应用程序将为您提供到达目的地的所有选择。 地铁,火车,汽车和公共汽车的旅行时间和ETA已包括在内,而散步和骑自行车所消耗的热量估计在卡路里中。 Oanda货币转换器 不必担心旅行时是否被多收了费用。 该货币转换器具有易于使用的界面,无论您身在何处,都可以根据您要支付的费用来调整费率。 它甚至还包含过时的货币功能,以了解您的钱用牙买加镑可值多少。 通过访问www.markdziuban.net来关注Mark Dziuban的旅行博客,以获取更新。

投资定制开发

随着INVASIVECODE推出SignaKit,我们想解释为什么您应该投资定制的代码。 SignaKit是一个高级iOS框架,可帮助您创建手写签名并将其添加到PDF文档中。 SignaKit是您需要付费的代码,并提供所需的支持,以确保它在将来的Apple更新中仍然有效。 开发应用程序时,您可以选择使用第三方代码和开源库,也可以创建自定义的构建代码。 使用开源代码看似简单,高效且具有成本效益,但是您可能需要考虑使用这些含义。 从长远来看,这实际上可能会花费您更多的金钱和时间。 随着每个Apple iOS过渡,更新iOS应用程序变得至关重要。 更新提供了机会,包括企业优化其应用程序的功能和美观性的机会,开发人员利用新技术和工具的机会以及吸引对利用最新平台感到兴奋的用户的机会。 很容易想到:我的应用程序现在运行流畅,因此可以轻松过渡到下一个iOS版本。 Apple提供了轻松转换代码的工具和平台。 可以重做图形,并且该应用程序看起来已经过完全重新设计。 但是大多数时候,您尚未编写的代码,一段代码或借来“修补”某种功能的库都会出现问题。 使用第三方代码和开放源代码库意味着相信其他开发人员的工作,并希望代码已经以完整性和标准编写。 但是,您应该考虑信任那些没有为编写的代码付费的开发人员,使他们免于承担全部责任:他们可能没有时间更新开源库,因为他们有一份付费的全职工作或他们的优先级可能已经改变。 或简单地说,他们可以编写或不编写质量代码,但是无论如何,您不能责怪他们,因为他们免费提供了代码! 当您的应用程序停止正常运行,或者在更糟的情况下,您的应用程序停止运行时,这将成为问题。 如果您没有与开发人员承担任何合同义务,则所使用的代码将由您自己承担。 为了理解开发过程,想象一下写一本书。 但是,编写本书时,不要自己写每个句子,而是想从其他作家那里借用每个句子。 此过程将节省您的时间。 从头开始写东西总是比从别人那里借书花费更多的时间和精力,并且基本上您要做的就是复制和重新配置。 但是,如果您必须在手稿上找到一个简单的错字,然后才能出版,那么您基本上是无助的,试图阅读和更正数千个未知的句子,最终无法出版您的书。 现在从应用程序开发以及更新iOS应用程序的实际情况来考虑这个问题。 在更新iOS应用时,Apple要求重新编译代码。 在重新编译过程中,Apple会检查应用程序是否存在错误,并确定它是否可以在新的OS版本上正常运行。 如果发现错误,则必须找到并修复。 如果您仍然希望进行更新(这对于保持相关性至关重要),则需要查找错误。 现在,发现错误似乎很简单。 作为编码员,错误是生活的一部分,发现并修复它们是我们的工作。 但是,如果该错误存在于由第三方编写的一段代码中,则开发人员将被迫花费大量时间和资源来浏览并修复其他人的工作,或者等待开发人员维护该代码修复它,可能会发生或可能不会发生,具体取决于开发人员的时间或关注点。 相反,购买SignaKit之类的定制代码将使您放心,当您可以请求快速,无缝地解决问题所需的支持时。 关键是,将代码片段放在一起看似更快,更容易启动,但要注意,随着技术的进步,您可能会遇到很多麻烦。 因此,内部编写本机iOS应用程序以及了解应用程序构成的重要性。 尽管第三方开源代码允许开发人员在短期内加快开发过程并节省资金,但其风险要比许多人希望的高得多。 产品的成功,无论是汽车应用还是移动应用,都取决于寿命。 如果一个小问题导致产品无用,那么就不可能说该产品具有任何实际价值。 尽管开放源代码的使用非常普遍,但是请考虑为在出现问题时提供支持的代码付费。 事实是,与包含第三方代码的应用程序相比,从头编写的iOS应用程序具有更大的价值,并且更易于维护。 有关SignaKit的更多信息,请访问iNVASIVECODE网站。 —伊娃·迪亚兹·桑塔纳(Eva Diaz-Santana) 她是InvasiveCode的共同创始人,从2008年开始开发iOS应用程序并教授iOS开发。她还曾在Apple担任Cocoa Architect和UX设计师。

真正的MVC

向iOS开发人员提出的最常见的采访问题之一是解释模型-视图-控制器(MVC)设计模式。 简而言之,M代表模型,V代表视图,C代表控制器。 控制器是视图和模型之间的中介。 例如,控制器可以告诉模型获取一些数据,然后模型检索数据,然后将数据发送回控制器,然后控制器告诉视图更新UI,但是视图从不与模型对话。 不幸的是,许多开发人员在实现时都在为这个概念而苦苦挣扎。 我们通常没有得到明确的区分,而是通常只得到2,有时是1。 为了解决此问题,许多人开始使用不同的设计模式,例如MPV,MVVM,Clean Swift(我最近遇到过)。 所有这些模式都试图解决相同的问题。 抽象,可重用性和易于测试。 但是,如果我告诉您MVC足以达到所需的抽象级别,并且足以使测试变得非常容易,并且每个组件都可以重复使用,该怎么办? MVC的问题并不是MVC真正的问题,而是我们实现MVC的方式。 我已经看过并遍历了许多代码,其中视图控制器充满了使测试和可重用性变得异常困难的代码。 如果我们能够按预期真正使用MVC,那么我们应该能够实现我们的目标,因此称为“ True MVC”。 好的,足够多的讨论,让我们看一些真实的例子。 想象我们有一个简单但现实的问题。 我们正在构建一个员工目录应用程序。 我们的应用程序有2个屏幕。 第一个屏幕显示按字母顺序排序的员工列表,当在列表上点按员工时,它将导航到员工详细信息屏幕。 为了保持简短和简单,我们将简单介绍第一个屏幕。 对于“员工列表”屏幕,我们具有以下组件。 EmployeesController,EmployeesModel,EmployeesView和Employee故事板。 由于控制器充当视图和模型之间的中介,因此控制器将具有EmployeesModel和EmployeesView的实例。 控制者 在我们的情节提要中,我们转到EmployeesController场景中的超级视图,转到身份检查器,然后将视图的类更改为EmployeesView。 然后,在控制器中创建一个插座。 //视图实例 @IBOutlet var employeeView:EmployeesView! //模型实例 让employeeModel = EmployeeModel() 现在我们有了Model和View的实例,我们需要在controller-view,controller-model,model-controller,view-controller之间建立通信。 可以通过协议实现通信。 因此,我们需要4个协议。 控制器中为2,视图中为1,模型中为1。 //控制器协议 协议EmployeesControllerModelDelegate { func getEmployees() } 协议EmployeesControllerViewDelegate { func updateTableViewWithData(员工:[员工]) } //查看协议 协议EmployeesViewDelegate { func […]

如何在Visual Studio 2015中设置OAuth以使用Google身份验证

OAuth(开放授权)是一种开放标准,允许用户使用其从其他网站(例如Google)的登录凭据登录网站。 登录时会创建一个访问令牌。 创建一个Web应用程序项目或打开一个包含授权的现有项目。 启用S​​SL(安全套接字层) SSL用于建立加密 Web服务器和浏览器之间的链接。 在解决方案资源管理器中,单击您的项目,然后按F4键或从工具栏中打开“视图”,然后单击“属性窗口”,打开“项目属性”窗口。 请注意,这是与右键单击并选择“属性”时显示的窗口不同的窗口。 在“启用SSL”的行上,双击“假”将其切换为“真”。 现在,“ SSL URL”行上将有一个https URL。 复制SSL URL。 请注意,端口号与通常的http URL不同,后者在下面的行中列出。 在项目属性页面中设置https URL。 在解决方案资源管理器中,右键单击您的项目,然后选择“属性”以打开“属性”页面。 从左侧的选项中选择“网页”页面。 对于“项目URL”,将http URL替换为您在上述步骤中复制的https URL。 您还需要此URL进行Google配置。 生成安全证书 将[RequireHttps]属性添加到家庭控制器,以便所有请求都需要https。 运行您的应用程序。 如果您已经在应用程序上设置为在当前计算机上使用OAuth,则已经为本地主机安装了证书,因此请跳至下一步。 如果这是您首次设置要使用OAuth的应用,则会显示以下窗口。 单击是。 然后将显示以下安全警告消息。 再次单击是。 使用Google启用您的应用程序 启动谷歌浏览器,并通过以下网址转到开发者控制台:https://console.developers.google.com/ 在“ Google API”旁边的顶部栏中,单击下拉列表,然后选择“创建项目”。 输入您的项目名称,然后单击“创建”按钮。 Google将需要一分钟的时间来创建该项目,然后库页面将显示流行的API类型列表。 为此,请在“社交API”下选择“ Google + API”。 在出现的窗口顶部,单击“启用” 在左侧面板中,单击“凭据”,然后在出现的凭据窗口顶部,单击“ OAuth同意屏幕”,然后输入“显示给用户的产品名称”。 这是您的用户会识别为您的应用程序的名称。 您的电子邮件应该已经显示。 点击“保存”。 点击“创建凭据”,然后从凭据类型列表中选择“ OAuth客户端ID”。 (另外两个是API密钥和服务帐户密钥,这些指令未涵盖这些密钥。) 在“凭据”输入页面上,将“ Web应用程序”选择为“应用程序类型”。 […]

iOS 10.2:在CoreFoundation上了解“互斥锁失败:参数无效”

几周前,iOS 10.2开始推出,Spreaker Podcast Radio几乎立即开始从10.2设备获取流量。 我们始终对崩溃进行严格监控,因此几天后,虽然iOS 10.2市场渗透率不断提高,但我们立即注意到iOS 10.2上平均每日崩溃的趋势有所增加。 这是从实际堆栈跟踪中提取的: 或这个: 如您所见,整个堆栈仅包含平台代码,因此一开始很难理解正在发生什么以及涉及应用程序的哪一部分。 我们还注意到有时涉及一些Javascript内容,wtf? 唯一的线索来自我们的日志:每次崩溃发生时,应用程序所做的最后一件事就是尝试从网络中播放(或预加载)音频文件。 我们的应用程序播放了来自多个不同来源的音频文件,并且在这些崩溃中均未发生这些音频文件,这些数据并未显示出某个音频文件(或远程托管)与这些崩溃之间的任何特定关联,我们也无法找到一种在本地播放它们的方法,只是玩一些随机的东西。 在花了数小时收集更多信息之后,我们偶然发现了Core Foundation参考,其中提到了在与代理自动配置相关的函数中通过CFArray和CFError传递结果的某些信息,并且在我们的堆栈跟踪中,这些对PAC / PACClient / PACFetcher的引用晦涩难懂。 if如果PAC表示“代理自动配置”怎么办? 💡💡💡 我们以前没有使用高级代理配置的经验,只是知道有一种方法可以配置设备以自动发现代理设置。 您可以浏览此站点以了解其详细信息,但为了简短起见,它类似于以下内容: 您配置代理自动发现设置以从远程URL获取配置 该URL用PAC文件答复,该文件是公开入口函数的Javascript文件。 在执行过程中,系统调用此函数,传递要获取的资源的url,该函数需要返回如何获取资源的方式,例如通过使用特定的代理或直接连接。 我们立即尝试运行Charles Proxy,并在请求/proxy.pac时启动本地http服务器来提供此PAC文件: 并使用以下网址在iOS设备上配置代理设置: http:// : /proxy.pac 有效!!! 好吧,它崩溃了,但这正是重现问题的关键,对吗? 那么,什么触发了此行为以及如何解决呢? 为了在我们的应用程序中提供出色的播放体验,我们必须实现自己的播放系统,而不是依靠Apple提供的基本AVAudioPlayer,并且此播放系统的某些内部组件直接处理CoreFoundation流。 从HTTP请求创建流后,我们对其进行配置,以考虑系统代理设置,方法是: 显然,注释最后两行将导致崩溃立即停止,但这意味着,如果您的网络仅允许通过代理的出站流量,则播放系统将无法工作。 有99.99%的人确定这是iOS 10.2上的错误,并且受iOS上一些Websocket库中所做工作的启发,其中CoreFoundation不会自动使用代理设置,因为它不了解ws://和wss://方案(此处为示例),我们决定手动实现Proxy Auto-Discovery协议, 但仅在iOS 10.2上,这是我们支持的唯一iOS版本(iOS8 +),不能自行处理 。 这项工作涉及: 查看代理设置,并检查是否启用了自动发现协议 提取PAC文件,并将其内容与CFNetworkCopyProxiesForAutoConfigurationScript一起使用,以确定需要使用哪个代理 相应地在流上设置kCFStreamPropertyHTTPProxy属性。 这里有人遇到过这个问题吗? 您是否还有其他想法可以改善此解决方法并使它更好地工作? 在评论中让我知道! 再见!