运行iOS 9.3.5的iPad和iPhone上的应用程序崩溃连接到IPv6

时间:2016-09-08 22:57:53

标签: ios swift core-data alamofire magicalrecord

我的应用商店评论存在问题。我从app商店收到这些消息。 第一次审查 “当我们输入Instagram帐户信息时,你的应用程序崩溃在运行iOS 9.3.5的iPad和iPhone上连接到IPv6网络。”

第二次审查 “当我们输入Instagram帐户信息时,你的应用程序在运行iOS 9.3.5的iPad和iPhone上崩溃连接到IPv6网络。 使用您的应用时发生这种情况:离线“

在我的应用中,我使用了Alamofire和Alamofire Object Mapper。我在uiwebview中发送请求,然后等待获取具有访问令牌的URL,之后我使用MagicalRecords保存在Core Data中。在我的设备上,我没有崩溃。

所以我的代码部分处理访问令牌上的url

    guard let url = url else {
        return nil
    }

    if !isRedirectURL(url) {
        return nil
    }

    let components = url.absoluteString.componentsSeparatedByString("=")
    if components.count == 2 {
        return components.last
    }
    else {
        return nil
    }

所以我检查url是重定向还是没有,appRedirectURL-它是来自Instagram Api的重定向网址

    guard let appRedirectURL = NSURL(string: appRedirectURL) else {
        return false
    }

    //check if both urls have host
    guard let host = appRedirectURL.host, urlHost = url.host else {
        return false
    }

    return appRedirectURL.scheme == url.scheme && host == urlHost 

保存在

首先,我尝试使用教程在我的mac上设置ipv6 https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1

但就我而言,我这样做了:

  1. 我连接了我的第一部iPhone并通过它设置了个人热点。
  2. 在我的Mac上使用NAT64在其他设备上共享Internet。
  3. 检查第二台设备上的所有内容。
  4. 但是我的设备上没有ipv6,这是个人热点,只有ipv4。也许,这是问题,我应该支持第一台设备???

    所以,我也有来自crashlytics的崩溃日志,但是他们非常奇怪,他们表明我在CoreData中遇到了问题。

    1. 0x1001dce94 CoreDataManager。(updateInstagramAccount(InstagramUser,completion:(Bool,NSError?) - >()?) - >())。(闭包#1)(CoreDataManager.swift:82)
    2. MagicalRecord 0x1006b9408 __51 + [MagicalRecord(Actions)saveWithBlock:completion:] _ block_invoke(MagicalRecord + Actions.m:33)
    3. CoreData 0x184fa508c developerSubmittedBlockToNSManagedObjectContextPerform + 196
    4. libdispatch.dylib 0x182af147c _dispatch_client_callout + 16
    5. libdispatch.dylib 0x182afd4c0 _dispatch_queue_drain + 864
    6. libdispatch.dylib 0x182af4f80 _dispatch_queue_invoke + 464
    7. 所以这是我的第一个功能

      func updateInstagramAccount(account: InstagramUser, completion: CoreDataSuccessBlock?) {
          CoreDataManager.sharedInstance.save({ (savingContext) in
              if let objectId = account.objectId, instagramAccount = InstagramAccount.createIfNeededWhereKey(InstagramAccount.Attributes.instagramId, equalTo: objectId, context: savingContext) as? InstagramAccount {
      
                  instagramAccount.username = account.username
                  instagramAccount.fullName = account.fullName
                  instagramAccount.profilePictureURLPath = account.profilePictureURL?.absoluteString
                  instagramAccount.website = account.website?.absoluteString
                  instagramAccount.bio = account.bio
                  instagramAccount.customizedBio = account.bio
      
                  if let follows = account.counts?.follows, followedBy = account.counts?.followedBy, media = account.counts?.media {
                      instagramAccount.followsCount = Int16(follows)
                      instagramAccount.followedByCount = Int16(followedBy)
                      instagramAccount.mediaCount = Int16(media)
                  }
                  instagramAccount.objectId = account.objectId
              }
          }) { (success, error) in
              completion?(success, error)
          }
      }
      

      我知道使用ipv6时,InstagramUser对象的映射有错误,但我确切地知道并且无法检查。

      你能问下一个问题:

      1. 我是否应该在我的第一台设备上安装ipv6以检查第二台设备上的ipv6,如果我与Nat64共享网络。
      2. 为什么我在CoreData中有错误,而不是UIWebView委托方法。
      3. 你可以建议修复它。
      4. 更新 我有这个url来处理访问令牌 https://mywebsite.com/#access_token=XXXXXXX.XXXXXX.XXXXXXXXXXXXXXXXXXXX

        可能是在ipv6上的情况我会得到不同的网址吗?

0 个答案:

没有答案