我正在编写一个使用托管在 Heroku 上的 Parse 的快速 iOS 应用程序。据我所知,所有数据传输都是通过 HTTPS 进行的,我没有对 info.plist 进行 App Transport Security 解决方法(并打算保持这种方式)。到目前为止,所有 Parse 查询在模拟器和运行 9.3.3 或 9.3.5 的实际 iphone 上都已正确执行。
直到现在我添加了这段代码,它在模拟器上完美运行,但由于通过 HTTP 发出的明文请求而在 iphone 上崩溃。但为什么要通过 HTTP 发出请求?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(idInstagramFeedCell, forIndexPath: indexPath) as! InstagramFeedCell
let imageFile = feed[indexPath.row].imageFile as PFFile
imageFile.getDataInBackgroundWithBlock({ (data, error) in
if let image = UIImage(data: data!) {
cell.postImage.image = image
} else {
cell.postImage.image = UIImage(named: defaultImageFile)
}
})
cell.postUsername.text = feed[indexPath.row].username
cell.postCaption.text = feed[indexPath.row].caption
return cell
}
有问题的行被隔离到 imageFile.getDataInBackgroundWithBlock({ ... }) 因为如果它被注释掉,应用程序不会在 iphone 上崩溃。
控制台中的错误是:
2016-08-18 18:51:56.074 ParseStarterProject-Swift[3694:2189084] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
2016-08-18 18:51:56.081 ParseStarterProject-Swift[3694:2189342] [Error]: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. (Code: 100, Version: 1.12.0)
2016-08-18 18:51:56.081 ParseStarterProject-Swift[3694:2189342] [Error]: Network connection failed. Making attempt 1 after sleeping for 1.373388 seconds.
2016-08-18 18:51:56.084 ParseStarterProject-Swift[3694:2189342] [Error]: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. (Code: 100, Version: 1.12.0)
奇怪 this poster有一种相反的问题。任何帮助将不胜感激。
其他观察结果:我实际上只是在模拟器上看到它崩溃了。最初上传(即发布)到 Parse 的所有图像都是来自模拟器本身的照片。当在实际设备上运行的应用程序尝试下载这些图像时,它会按照上述方式崩溃。自从使用该应用程序后,我将实际设备上的几张照片发布到 Parse。当模拟器上运行的应用程序尝试下载这些照片时,模拟器崩溃并出现与上述相同的错误。
最佳答案
由 GitHub 上的 @luizmb 提供,解决方案很简单。显然有一个鲜为人知的(至少对我而言)解析服务器变量 publicServerURL 需要包含与 serverURL 相同的值。如果您依靠 Heroku Parse 控制台来管理您的实例,您可以通过定义环境变量 PARSE_PUBLIC_SERVER_URL 来设置它。如果您有自定义实例,则需要在实例化 Parse 时将此行添加到 index.js:
publicServerURL: process.env.PARSE_PUBLIC_SERVER_URL || process.env.PARSER_SERVER_URL || process.env.SERVER_URL,
但是有两个注意事项:1) 如果您像我一样在实现此解决方案之前上传了任何图像文件,您仍然可能会遇到 ATS 错误。要解决此问题,您需要像我一样从您的实例中删除所有此类图像。 2) 我只能让它在实际设备 (iOS 9.3.5) 上运行,但在模拟器 (iOS 9.3) 上运行完全相同的应用程序,ATS 错误没有显示,但这些我还没有找到方法绕过:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
[Error]: An SSL error has occurred and a secure connection to the server cannot be made. (Code: 100, Version: 1.14.2)
[Error]: Network connection failed. Making attempt 4 after sleeping for 15.848020 seconds.
此解决方案使您的应用能够从 Parse 下载图像文件,而无需通过 info.plist 中的 AllowArbitraryLoads 关闭 ATS。请看here for details .
关于ios - 为什么 swift parse .getDataInBackgroundWithBlock 被阻止为明文 http 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029619/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串