私はアプリストアにiOS10の最初の数ベータまで完全に正常に動作するアプリを持っています(どれが正確かはわかりません)。また、iOS9.3でも問題なく動作します。
ただし、iOS 10ベータ7でテストしておらず、Googleサインインが完全に壊れています。 GIDSignIn
の最新バージョンのcocoapods
を使用しています。
これが私のコードです:
[GIDSignIn sharedInstance].clientID = [[ParseFetcher sharedInstance] getRandomParseK];
[GIDSignIn sharedInstance].delegate = sharedInstance;
[GIDSignIn sharedInstance].uiDelegate=sharedInstance;
[GIDSignIn sharedInstance].scopes = [NSArray arrayWithObjects:@"https://www.googleapis.com/auth/youtube",@"https://www.googleapis.com/auth/youtube.force-ssl", nil];
[[GIDSignIn sharedInstance] signIn];
これは、デバイス上でどのように見えるかです。
それはこのように立ち往生しているだけです。
上部の更新ボタンをクリックすると、更新しようとして、ここで永久にスタックします。
[完了]ボタンをクリックすると、アプリに戻ります。
コンソールに記録されたエラーはありません。
ただし、iOS 10シミュレーターで同じアプリを実行すると、safari view controller
も開きません。何も起こりません。しかし、コンソールはこの長い冗長なものをログに記録します。その中から、以下が最も「有用な」もののように見えますが、何が問題なのかわかりません。
nw_endpoint_resolver_receive_report [8 i.ytimg.com:443 in_progress resolver (satisfied)] received child report:[8.1 206.248.149.148:443 waiting path (satisfied)]
2016-08-22 23:19:51.531570 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_connection_endpoint_report [8.1 206.248.149.148:443 waiting path (satisfied)] reported event path:satisfied
2016-08-22 23:19:51.531909 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_proxy_handler_should_use_proxy Looking up proxy for hostname: <nil>, ifindex: 0
2016-08-22 23:19:51.533116 XXXXAPPNAMEXXXXXXX[4561:195631] [] -[NWConcrete_nw_endpoint_flow startWithHandler:] [8.1 206.248.149.148:443 waiting socket-flow (satisfied)]
2016-08-22 23:19:51.533548 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_setup_socket [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] creating socket
2016-08-22 23:19:51.534108 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_attach_protocols [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)]
2016-08-22 23:19:51.534672 XXXXAPPNAMEXXXXXXX[4561:195631] [] __nwlog_err_simulate_crash simulate crash already simulated "nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available"
2016-08-22 23:19:51.535415 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace:
[x86_64] libnetcore-856.1.8
0 libsystem_network.dylib 0x000000010c6e280e __nw_create_backtrace_string + 123
1 libnetwork.dylib 0x000000010e0d5194 nw_socket_add_input_handler + 3002
2 libnetwork.dylib 0x000000010e0b2db8 nw_endpoint_flow_attach_protocols + 3768
3 libnetwork.dylib 0x000000010e0b1dd5 nw_endpoint_flow_setup_socket + 563
4 libnetwork.dylib 0x000000010e0b0b34 -[NWConcrete_nw_endpoint_flow startWithHandler:] + 2612
5 libnetwork.dylib 0x000000010e0cbd11 nw_endpoint_handler_path_change + 1261
6 libnetwork.dylib 0x000000010e0cb740 nw_endpoint_handler_start + 570
7 libnetwork.dylib 0x000000010e0e3003 nw_endpoint_resolver_start_next_child + 2240
8 libdispatch.dylib 0x000000
2016-08-22 23:19:51.535995 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_flow_attach_protocols [8.1 206.248.149.148:443 in_progress socket-flow (satisfied)] Attached flow protocol
2016-08-22 23:19:51.536475 XXXXAPPNAMEXXXXXXX[4561:195631] [] nw_endpoint_resolver_receive_report [8 i.ytimg.com:443 in_progress resolver (satisfied)] received child report:[8.1 206.248.149.148:443 in_progress socket-flow (satisfied)]
注:iOS9.3は完全に機能します。また、すべてのデバイスで発生します-iPhone6sおよびiPhone5sでテストされています。
これが他の人が直面していることかどうかはわかりませんが、[self.view layoutIfNeeded]
を追加して解決しました。私はこれが奇妙であることを知っていますが、これは私のために働いたものです、私自身は理由がわかりません。
私はカスタムビューコンテナを使用していて、その中にGoogleのサインインビューコントローラを子として表示していました。したがって、カスタムビューコントローラーをコンテナーに追加する前に、[self.view layoutIfNeeded]
を実行する必要がありました。そうしないと、ビューレイアウトがまだ設定されていないため、GoogleのSDKはおそらく内部のどこかで幅/高さを使用します。
これが正しい解決策であるかどうかはわかりませんが、問題は解決したようです。
GoogleサインインのサンプルiOSプロジェクトにも同じ問題があります。
それは戻ります:
"Error Domain=com.google.GIDSignIn Code=-2 "keychain error" UserInfo={NSLocalizedDescription=keychain error}"
これはバグのようです。
サインイン(1.7.1)に(まだ)Google+ SDKを使用していますが、iOS 10ベータ7でも壊れたです。GPPSignInが非推奨になったため、GIDSignInへの移行を検討していました。しかし、私は次のベータを待つと思います...
ターゲットの機能タブで「キーチェーン共有」をオンにすると、機能します。
サブビューを適切に表示するようにコードを修正することで、私の場合の解決策を見つけることができます。この警告が表示される前に無視しました:
Warning :-Presenting view controllers on detached view controllers is discouraged
プラノイCの答えを見るまで。私のコードは、ビューコンテナを使用してGoogleボタンを含むサブビューを表示するのと非常によく似た方法で構造化されています。サブビューを表示するためにコンテナを正しく使用していませんでした。だから私は Appleのガイド 、特にこのブロックに従いました:
- (void) displayContentController: (UIViewController*) content {
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self];
}
警告が消えると、Googleは適切に機能し始めました。
この問題の根本的な原因については、まだ正確にはわかりませんが、警告はヒントのようです。それは、切り離されたビューコントローラと関係があります。 (私はiOSコーディングの経験があまりないので、誰かがビュー、ビューコントローラーについてより多くの知識を持っている場合は、気軽にチャイムを鳴らしてください。)
私たちの問題は、アプリデリゲートに自動統合しようとしているサードパーティのプラグインでした。私たちにとって、それはCleverTap(autoIntegrate()
関数)でした。
何もしないアプリケーションの起動が終了しているときに、clientIDを設定するだけです。以下のコードで与えられるように:
インポートFBSDKLoginKitインポートGoogleSignInインポートGGLCore
@UIApplicationMainクラスAppDelegate:UIResponder、UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
var ConfigError : NSError?
GGLContext.sharedInstance().configureWithError(&ConfigError)
assert(ConfigError == nil, "Error Configuration with Google services: \(ConfigError)")
GIDSignIn.sharedInstance().clientID = "679401366566-8107g2n11hpnqas58m9v8rk7hl2lgl7s.apps.googleusercontent.com" // Here You Have To Change Your App ID
let fbDelegate = FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
print("DidFinish")
return fbDelegate
}