我有一个应用程序,我们已经提交了过去6个月的版本,我们确实使用APNS.升级到Xcode 8后,我收到了Apple的以下电子邮件
亲爱的开发者,
我们发现您最近为APP_NAME发送了一个或多个问题.您的投放成功,但您可能希望在下次投放时更正以下问题:
缺少推送通知权利 - 您的应用程序包含Apple推送通知服务的API,但应用程序签名中缺少aps-environment权利.要解决此问题,请确保在Provisioning Portal中为推送通知启用了App ID.然后,使用包含aps-environment权利的分发配置文件为您的应用签名.这将创建正确的签名,您可以重新提交您的应用程序.有关详细信息,请参阅"本地和推送通知编程指南"中的"供应和开发".如果您的应用不使用Apple推送通知服务,则无需执行任何操作.您可以从将来的提交中删除API以停止此警告.如果您使用第三方框架,则可能需要与开发人员联系以获取有关删除API的信息.
纠正问题后,您可以使用Xcode或Application Loader将新二进制文件上传到iTunes Connect.
问候,
App Store团队
有点奇怪的是我去了developer.apple.com - > 证书,标识符和配置文件,我的AppId确实启用了推送通知.我没有做过任何不同的事情然后我已经完成了它所以很好奇,如果Xcode 8更新破坏了什么.有任何想法吗?
BTW:他们为推送通知编程指南提供的链接在电子邮件中被破坏了,所以这不是一个好兆头.
我有,我加入了一个框架目标具有自定义子类迅捷的项目UIView,所以我可以在Xcode 6.用Interface Builder中新的实时取景但是当我尝试添加@IBOutlet在我的UIViewController子类的项目中,我得到一个"的使用未声明的类型'MyCustomView'"错误,我无法构建我的项目.
这是来自UIViewController子类的代码:
import UIKit
import MyCustomFramework
class MyViewController: UIViewController {
@IBOutlet var myCustomView: MyCustomView?
}
Run Code Online (Sandbox Code Playgroud)
这就是'MyCustomFramework'目标中的'MyCustomView.swift':
import UIKit
@IBDesignable class MyCustomView: UIView {
@IBOutlet var imageView: UIImageView?
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
}
Run Code Online (Sandbox Code Playgroud)
谁知道我忘记了什么?我是以错误的方式导入的吗?我错过了什么?
我正在使用a UIPageViewController,我需要在用户滑动时获取ViewController的滚动位置,这样我可以在视图转换到下一个视图时部分淡化某些资源UIViewController.
委托和数据源方法UIPageViewController似乎没有提供对此的任何访问,并在内部我假设UIPageViewController必须在某处使用滚动视图,但它似乎没有直接子类化它所以我不能呼叫
func scrollViewDidScroll(scrollView: UIScrollView) {
}
Run Code Online (Sandbox Code Playgroud)
我已经看到一些其他帖子建议获取引用pageViewController!.view.subviews然后第一个索引是一个scrollView,但这似乎非常 hacky.我想知道是否有更标准的方法来处理这个问题.
我正在尝试翻译一些基本上懒惰加载变量的Objective-C代码.代码类似于以下内容:
-(NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
//...code to build the fetchedResultsController with a new predicate
Run Code Online (Sandbox Code Playgroud)
每当他们想要重建fetchedResultsController以使用新的谓词时,他们只需将其设置为"nil"并调用它,它将使用新的谓词重建它.
我正在努力在Swift中完成同样的任务.据我所知,Swift懒惰变量在第一次被调用后成为正常变量.这对我来说是个问题,因为如果我尝试将我的swift变量设置为nil并回想起来,它就不会重建但仍然是零.
将fetchedResultsController加载为惰性变量的工作代码如下所示.我已经尝试将它更改为计算属性,方法是添加一个检查它是否为nil并将其放在get块中,但是这没有用.有任何想法吗?
lazy var taskController : NSFetchedResultsController? = {
var subtaskRequest = NSFetchRequest(entityName: "Subtasks")
var segIndex = self.segmentedControl.selectedSegmentIndex
subtaskRequest.predicate = NSPredicate(format: "task.category.name == %@", self.segmentedControl.titleForSegmentAtIndex(segIndex)!)
subtaskRequest.sortDescriptors = [NSSortDescriptor(key: "task.englishTitle", ascending: true), NSSortDescriptor(key: "sortOrder", ascending: true)]
let controller = NSFetchedResultsController(fetchRequest: subtaskRequest, managedObjectContext:
self.managedObjectContext!, sectionNameKeyPath: "task.englishTitle", cacheName: nil)
controller.delegate = self
return controller
}()
Run Code Online (Sandbox Code Playgroud) 在最近的iOS 9更新以及Facebook SDK(4.6.0)的更新之后,我发现我的登录会话不再在应用程序启动之间持续存在.
到目前为止,我的流程非常简单.
FBSDKLoginButton.FBSDKAccessToken.currentAccessToken(),然后可以在应用程序中使用Facebook.我发现的是在最近的更新之后我的AccessToken现在出现了,nil好像我关闭并再次启动应用程序.这是一个主要问题,因为以前我只需要登录一次,然后我的会话就会自动更新.
如果我是正确的,登录应该只发生一次,之后应用程序应该能够存储将来连接到Facebook所需的信息,或者只是保留一个刷新自己的令牌.
在iOS9或4.6.0 Facebook SDK更新后,有没有人有任何想法可能导致这种情况?是否存在需要持久保存的属性,以便将来刷新令牌或者是否应该自动续订令牌?我接近100%肯定,Facebook SDK的预期体验不是必须在每个应用程序启动时登录(当您重新启动应用程序时,关闭所有方式并再次打开).
谢谢!
更新
根据回复中的要求,我在Plist文件的TransportSecurity信息中添加了一个额外的密钥.不幸的是,还没有运气.
据我所知,双方del a并del(a)似乎具有相同效果的工作.如果是这种情况,为什么Python允许del作为语句和函数存在?
我正在尝试调试以下崩溃,并且对此错误的含义有点无能为力.我是通过iPhone上的应用程序从用户那里得到的,崩溃来自Crashlytics.
崩溃标题为:EXC_BREAKPOINT 0x00000000e7ffdefe崩溃:com.apple.main-thread
线程:
崩溃:com.apple.main-thread 0 Mutual 0xfff58 AlbumViewController.(getFacebookAlbums(() - >()?) - >()).(closure#1)(AlbumViewController.swift:78)1 Mutual
0xfe95c partial apply对于AlbumViewController.(getFacebookAlbums(() - >()?) - >()).(闭包#1)(AlbumViewController.swift)2 Mutual
0xfe95c部分申请AlbumViewController.(getFacebookAlbums(() - >()?) - >()).(闭包#1)(AlbumViewController.swift)3 FBSDKCoreKit
0x5a2661 - [FBSDKGraphRequestMetadata invokeCompletionHandlerForConnection:withResults:error:] + 96
它指向的代码(AlbumViewController的第78行)是这个函数的结束括号:
func getFacebookAlbums(completion: (() -> Void)? = nil){
FBSDKGraphRequest(graphPath: "me/albums?fields=name,picture,count&limit=16&offset=\(offset)", parameters: nil).startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
if let albumData = result["data"] as? NSArray{
for album in albumData{
let albumName = album["name"] as? String ?? ""
let albumId = album["id"] as? …Run Code Online (Sandbox Code Playgroud) 我一直在研究如何安全地在应用程序之间共享数据.在使用错误的方法深入研究实现之前,我想获得一些正确的处理方法的信息.只是因为你可以做某事并不一定意味着你应该做.
用户案例:我正在开发一套语言学习应用程序,它们具有数百个音频文件的共享音频文件,以及包含与语言相对应的重要数据的json文件.我更愿意允许用户在我们的套件中使用其他应用时不必重新下载语言包.
1.应用扩展程序 - 文档提供程序非UI变体
根据文件:
文件提供程序扩展使用打开和移动操作授予对主机应用程序沙箱外部文件的访问权限.此扩展(有时缩短到文件提供程序)还允许主机应用程序下载文件而不显示文档选择器视图控制器.此功能允许主机应用程序使用安全URL书签访问以前打开的文档,即使这些文件不再存储在设备上也是如此.
从表面上看,这似乎是一个非常可靠的解决方案.我主要担心的是最后几行,它表明应用程序可以下载不再存储在设备上的文件.我希望文件存储在设备本地,以防止不断下载.如果文档提供程序确实在本地存储文件并允许组中的各种应用程序访问文件,那么我认为这可行.
2.共享钥匙串访问
允许您将数据安全地存储到共享密钥链,以便属于一组应用程序的其他应用程序可以访问.共享密钥链访问权限的所有应用程序必须使用相同的应用程序ID前缀.有关共享密钥链访问的示例.
我看了一下这个文档,我认为这可能是最合适的.我对此解决方案的主要关注是上传的数据是否存在大小限制,以及是否允许使用mp3/ogg/json文件类型.我在这个解决方案中发现的大多数示例/用途都指向共享字符串和小数据,我不确定它是否会处理像json或音频文件这样的大数据.
我还发现这个回购显然更容易处理Keychain:
3.定制粘贴板
自定义粘贴板最适合在两个应用程序之间半私有地共享自定义数据.使用唯一名称标识自定义粘贴板.它们可以将数据保留在创建它们的应用程序之外,允许粘贴板在应用程序终止后或甚至在重新启动设备后保留数据.
在粘贴板上写入数据或从中读取数据时,必须指定粘贴板类型.粘贴板类型通常使用统一类型标识符(UTI)来标识进入粘贴板并从粘贴板检索的数据类型.有关其他信息,请参阅Apple的UIPasteboard类参考文档.
以上文档摘自这篇文章
我对这个解决方案的主要关注点可能是它有点像黑客.从逻辑上讲,粘贴板似乎是临时保存数据并允许在应用程序之间共享的东西,而我正在寻找的解决方案需要更多的永久解决方案.
我很感激有关在应用之间共享这些类型文件的最佳做法的任何信息.我假设有很多其他的解决方案我在这里省略了,所以如果有更好的选择,我会喜欢它的一些信息.如果它发生了我在这里列出的解决方案之一是一个解决这个问题的好方法我想更多地了解你与他们合作的经验,如果我对他们的关注是有效的,或者没有什么可担心的.
Thx提前.一如既往,写得很好的答案得到了投票;)
我无法在iOS上使用CRL。我创建了两个测试用例。我有由CA颁发的有效证书。我有由CA颁发的另一个有效证书,但是CA已将该证书添加到其CRL中。
然后,我设置了一个启用CRL检查并要求成功的吊销策略。
func crlValidationTest(trustedCert: SecCertificate, certToVerify: SecCertificate) -> Bool {
let basicPolicy = SecPolicyCreateBasicX509()
let crlPolicy = SecPolicyCreateRevocation(kSecRevocationOCSPMethod | kSecRevocationCRLMethod | kSecRevocationRequirePositiveResponse)!
var trust: SecTrust?
SecTrustCreateWithCertificates(NSArray(object: certToVerify), NSArray(objects: basicPolicy, crlPolicy), &trust)
SecTrustSetAnchorCertificates(trust!, NSArray(object: trustedCert))
SecTrustSetNetworkFetchAllowed(trust!, true)
var trustResult = SecTrustResultType.invalid
guard SecTrustEvaluate(trust!, &trustResult) == errSecSuccess else {
return false
}
return trustResult == SecTrustResultType.proceed || trustResult == SecTrustResultType.unspecified
}
Run Code Online (Sandbox Code Playgroud)
我的期望是CRL上的证书将不受信任,而干净的证书将受到信任。
在上述配置的情况下,两者均会由于不受信任而失败。如果删除该kSecRevocationRequirePositiveResponse标志,则两者均成功。我已经尝试过仅使用OSCP或仅使用CRL的所有不同排列方式,但没有一种能达到我期望的效果。
Apple 的州文件SecPolicyCreateRevocation:
除非您希望覆盖默认的系统行为(例如强制使用特定方法或完全禁用吊销检查),否则通常无需自己创建吊销策略。
仅使用该SecPolicyCreateBasicX509策略就可以使两者都成功(当第二个证书应该失败时),那么Apple的默认行为是根本不进行CRL检查吗?
我将CharlesProxy附加到我的设备上,并在侦听所有网络流量的同时多次运行该代码,并且没有出站请求发送到CRL,这解释了为什么RequirePositiveResponse选中该标志时所有请求都失败。
我还尝试使用进行从设备直接导航到CRL的操作URLRequest,并且能够毫无问题地获取设备上的CRL数据。 …
我正在努力将我的一个应用程序上的一些功能提取到一个包中,以便我可以集中一些重用的代码,在这样做的过程中,我将对 firebase 的依赖项拉到我的包中。一旦我这样做了,由于以下错误,我无法再获得我的包的更新:
无法解析包
因为没有任何版本的 mobile.ios.MYPACKAGE 符合要求 1.0.7..<2.0.0 并且使用基于版本的要求需要包 mobile.ios.MYPACKAGE 并且它取决于 unversion 包 firebase-ios-sdk, mobile。 ios.MYPACKAGE >=1.0.6 被禁止。并且因为 root 依赖于 mobile.ios.MYPACKAGE 1.0.6..<2.0.0,版本解析失败。
这个错误是有道理的,因为我的 Package.swift有一个对 的引用firebase-ios-sdk,它目前处于测试阶段。没关系,因为我不打算在今年晚些时候 firebase 退出测试版之前发布我的 pacakge。
我对依赖项数组中的包的引用:
dependencies: [
.package(name: "Firebase",
url: "https://github.com/firebase/firebase-ios-sdk.git",
.branch("6.32-spm-beta")),
...
Run Code Online (Sandbox Code Playgroud)
我对目标数组中的 firebase 包的引用
targets: [
.target(
name: "MYPACKAGE",
dependencies: ["Alamofire", "SwiftyJSON",
.product(name: "FirebaseAuth", package: "Firebase"),
.product(name: "FirebaseCrashlytics", package: "Firebase"),
.product(name: "FirebaseAnalytics", package: "Firebase"),
Run Code Online (Sandbox Code Playgroud)
您可以看到我6.32.spm-beta在他们的文档中引用了firebase 指示您执行的操作。我怎样才能解决这个问题,以便我可以在 firebase 仍处于测试阶段时将我的包与我的应用程序集成?
swift ×9
ios ×8
certificate ×1
data-sharing ×1
firebase ×1
frameworks ×1
keychain ×1
lazy-loading ×1
objective-c ×1
python ×1
security ×1
uipasteboard ×1
xcode ×1