iPhone

iOS一部のユーザだけWKWebViewでエラー( NSErr.code 105 )が発生する – アクセスログは存在するがdidFailProvisionalNavigation

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        let nserr = error as NSError

NSLog("didFailProvisionalNavigation :\(nserr.code)")

iOSのアプリでWKWebViewを利用して表示しているページが一部のユーザだけ表示できず、didFailProvisionalNavigation Error 105が発生するので原因調査

自分の環境では発生しないので、一般ユーザから動作ログをレポートしてもらう機能をつけてから、アクセスログと突合させてみると、didFailProvisionalNavigationが発生した場合、アプリに同梱したHTMLを表示させているが、そのHTMLが表示された後、すぐにアクセス失敗したURLのパラメータ欠損みたいなURLに自動的に再度読み込まれる動きをしていることがわかりました。

didFailProvisionalNavigationで発生しているのは105で検索しても情報があまり見つからなかったが、下記のスレッドを発見しました。

https://bugs.chromium.org/p/chromium/issues/detail?id=831381

どうやらペアレントコントロールの影響のようで、Code 105で動きが今回の件と似ています、当初は広告ブロックも疑いましたが、SFSafariViewControllerではなく、wkWebviewなので除外していましたが、ペアレントコントロールはwkWebviewでも動作するようで、多分これです。

試しに再現するユーザー直接連絡してsafariでwkWebviewでエラーとなるページを開いてもらいましたが、アクセスできないとのことでした。

試した限りはコンテンツの内容ではなく、URLのそれっぽい文字列のようでしたので、別のURLを用意してリリースして対応

ITMS-90809: Deprecated API Usage (UIWebView APIを使用したアプリアップデート) 対策でGoogle-Mobile-Ads-SDKを更新

iOSアプリにちょっと修正を加えてアップロードしたら、こんなメッセージを受けました。

最新の配信で、1つ以上の問題が確認されました。配信は成功しましたが、次の配信では以下の問題を修正してください。ITMS-90809: Deprecated API Usage – Appleは2020年12月以降、UIWebView APIを使用したアプリアップデートの投稿を受け付けなくなります。詳細は https://developer.apple.com/documentation/uikit/uiwebview を参照してください。問題を修正したら、新しいバイナリをApp Store Connectにアップロードしてください。よろしくお願いします。App Store チーム

UIWebViewを利用していると表示されるのですが、アプリ本体はwkWebviewにしばらく前から移行してるので、何かのライブラリが原因のようです。

プロジェクトのディレクトリでfindしてみたらadmobのライブラリのようです。

Binary file ./Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds matches

admobのリリースノートにも、2020‑02‑28(7.56.0)で対応されてます。

https://developers.google.com/admob/ios/rel-notes

Warning: Calling this method may negatively impact your Google mediation performance. This method should only be called if you include Google mediation adapters in your app, but you won’t use mediate through Google during a particular app session (for example, you are running an A/B mediation test).

cocoapod経由でアップデートします。

pod update Google-Mobile-Ads-SDK
Updating local specs repositories

CocoaPods 1.8.4 is available.
To update use: `sudo gem install cocoapods`

For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.8.4

Analyzing dependencies
Downloading dependencies
Installing Google-Mobile-Ads-SDK 7.57.0 (was 7.25.0)
Installing GoogleAppMeasurement (6.1.2)
Installing GoogleUtilities (6.5.2)
Generating Pods project
Integrating client project
Pod installation complete! There are 3 dependencies from the Podfile and 11 total pods installed.

アップデートしたところ、admob関連でアプリが落ちるので、調べてみると

*** Terminating app due to uncaught exception 'GADInvalidInitializationException', reason: 'The Google Mobile Ads SDK was initialized without an application ID. Google AdMob publishers, follow instructions here: https://googlemobileadssdk.page.link/admob-ios-update-plist to set GADApplicationIdentifier with a valid app ID. Google Ad Manager publishers, follow instructions here: https://googlemobileadssdk.page.link/ad-manager-ios-update-plist'
*** First throw call stack:
(
	0   CoreFoundation                      0x000000010a7f81ab __exceptionPreprocess + 171
	1   libobjc.A.dylib                     0x0000000109e8df41 objc_exception_throw + 48
	2   CoreFoundation                      0x000000010a7f80f9 -[NSException raise] + 9
	3   myapp02                      0x0000000104cffabb GADApplicationVerifyPublisherInitializedAnalyticsCorrectly + 414
	4   myapp02                      0x0000000104cb05d6 GADEnvironmentIsSupported + 1020
	5   libdispatch.dylib                   0x000000010da893f7 _dispatch_call_block_and_release + 12
	6   libdispatch.dylib                   0x000000010da8a43c _dispatch_client_callout + 8
	7   libdispatch.dylib                   0x000000010da8f352 _dispatch_queue_override_invoke + 1458
	8   libdispatch.dylib                   0x000000010da961f9 _dispatch_root_queue_drain + 772
	9   libdispatch.dylib                   0x000000010da95e97 _dispatch_worker_thread3 + 132
	10  libsystem_pthread.dylib             0x000000010df529f7 _pthread_wqthread + 220
	11  libsystem_pthread.dylib             0x000000010df51b77 start_wqthread + 15
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Google Ad Managerで配信している場合に必要な設定が増えているようです。

info.plistにGADIsAdManagerAppのキーを作成して、YESを設定

GADInvalidInitializationException-GoogleMobileAdsアップデートしたら動かなくなった

GADInvalidInitializationExceptionが発生

GoogleMobileAdsをアップデートしたら、iOSアプリがクラッシュするようになってしまった。


2019-03-29 17:20:39.153251+0900 test.app[9165:102709] *** Terminating app due to uncaught exception 'GADInvalidInitializationException', reason: 'The Google Mobile Ads SDK was initialized incorrectly. Google AdMob publishers should follow instructions here: https://googlemobileadssdk.page.link/admob-ios-update-plist to include the AppMeasurement framework, set the -ObjC linker flag, and set GADApplicationIdentifier with a valid App ID. Google Ad Manager publishers should follow instructions here: https://googlemobileadssdk.page.link/ad-manager-ios-update-plist'
*** First throw call stack:

GADInvalidInitializationExceptionの原因

いままでAppDelegateでGADMobileAds.configure( APPID )してましたがこれがとうとうダメになったようです。

‘configure(withApplicationID:)’ is deprecated: Use [GADMobileAds.sharedInstance startWithCompletionHandler:]


 GADMobileAds.configure(withApplicationID: 

今後はInfo.plistにGADApplicationIdentifierを追加するらしいです。


GADApplicationIdentifier
ca-app-pub-123~????????

Androidはちょっと前からmanifest.xmlに追加が必要になっていたので同じ感じ。
Googleが解析しやすいようにするのかな?

carthageでpkluz/PKHUDがBuild Failed – バージョン指定を間違えてビルドエラー


$ cat Cartfile
github "pkluz/PKHUD" ~> 4.0

$ carthage update --platform iOS PKHUD
*** Building scheme "PKHUD" in PKHUD.xcodeproj
Build Failed
	Task failed with exit code 65:
	/usr/bin/xcrun xcodebuild -project /Users/dp/dev/Xcode/test.app/Carthage/Checkouts/PKHUD/PKHUD.xcodeproj -scheme PKHUD -configuration Release -derivedDataPath /Users/dp/Library/Caches/org.carthage.CarthageKit/DerivedData/10.2_10E125/PKHUD/4.2.3 -sdk iphoneos ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES archive -archivePath /var/folders/bv/0637g83s7bz_l040pkghmt380000gn/T/PKHUD SKIP_INSTALL=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO CLANG_ENABLE_CODE_COVERAGE=NO STRIP_INSTALLED_PRODUCT=NO (launched in /Users/dp/dev/Xcode/test.app/Carthage/Checkouts/PKHUD)

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/bv/0637g83s7bz_l040pkghmt380000gn/T/carthage-xcodebuild.15y1aS.log

Build Failed , Task failed with exit code 65

ログを確認します。


cat /var/folders/bv/0637g83s7bz_l040pkghmt380000gn/T/carthage-xcodebuild.15y1aS.log

note: Planning build
note: Constructing build description
Build system information
error: SWIFT_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0. (in target 'PKHUD')

Build system information
error: SWIFT_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0. (in target 'PKHUD')

** ARCHIVE FAILED **

バージョン指定間違ってた。。


$ cat Cartfile
- github "pkluz/PKHUD" ~> 4.0
+ github "pkluz/PKHUD" ~> 5.0

https://github.com/pkluz/PKHUD

Xcode10.2 (10E125)にしたらcarthageでIncompatible Swift version

carthageはバイナリが準備されていればダウンロードしてビルド短縮しますが
importしたバイナリがXcodeのアップデートで4から5になってしまったので
buildした環境と変わってしまったのでエラーが出てしまいました。


Skipped installing FontAwesome.swift.framework binary due to the error:
	"Incompatible Swift version - framework was built with 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1) and the local version is 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3)."

version0.20からはSwiftのバージョンが異なる場合ビルドしてくれるそうなので
Carthageをバージョンアップしました。


brew upgrade carthage

version0.20からはSwiftのバージョンが違ったので「Falling back to building from the source」を勝手に実行してくれました。


** Downloading FontAwesome.swift.framework binary at "Dynamic Type"
***  Skipped installing FontAwesome.swift.framework binary due to the error:
	"Incompatible Swift version - framework was built with 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1) and the local version is 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3)."

    Falling back to building from the source

iOSでAdMob No ad to show.がでるけど追跡型広告を制限をOFFで解決した

iOSでAdMobを設定してリリース前にTestDeviceID設定してないiPhoneでバナーなどが表示されないことがよくある。
AdmobのAppIDとコードはあってるけど
こんなエラー。。


Banner error Request Error: No ad to show.

コード作成してすぐはNGとか0ptの枠に表示してるとかStackOverflowにはあるけど
自分の場合は、iOS側のプライバシー設定の「追跡型広告を制限」をOFFにすると広告が表示される。
ということはたまたま金額などの関係で追尾広告だけが配信されてるってことなのかな?

EXC_BAD_ACCESSが出たけど、よく見たら凡ミスだった

EXC_BAD_ACCESSはlogに書き込むデータを取得しているところだった
さっきまで動いてたんだけどな。。


formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
return formatter.string(from: date)

let fileName = filePath.components(separatedBy: "/").last

と思ったら、SwiftBeaverから切り替えたときについでにprint()がプロジェクトにところどころ残ってたので調子に乗ってLoggerに置き換えしたら、logger自身のアウトプットのprintもloggerメソッドに切り替えたので無限ループしてEXC_BAD_ACCESSでした。

UIStackViewはsetBackgroundColorで背景色変更が出来なかった

背景を変えようとsetBackgroundColorしたけど
エラーは出ないけど、UIStackViewってsetBackgroundColorでは色変わらないらしい。


こんな感じではダメだった。XCodeサジェストだすなよ。。
UIStackView.setBackgroundColor( UI.Color )

how to change the background color of UIStackView?
https://stackoverflow.com/questions/34868344/how-to-change-the-background-color-of-uistackview

スマートフォン&モバイルEXPOに行ってきました。

スマートフォン&モバイルEXPOに行ってきました。
東京ビックサイトで行われる、スマートフォンやモバイルに関する、ソリューションやサービスが一堂に出展する専門展で
同時開催で「データストレージEXPO」「情報セキュリティEXPO[春]」「クラウドコンピューティングEXPO[春]」なども同時に行われていました。

スマートフォン&モバイルEXPO招待券

NTT DOCOMOなど、様々な企業が出展していました。
スマートフォン&モバイルEXPO_NTT_DOCOMO
ドコモはみずほ銀行とリリースした『おうちのおかね』アプリのブースがありました。
公共料金の支払いや家賃の支払いなど、家計管理のイロハを教えてくれる本のARアプリ
スマートフォン&モバイルEXPO_NTT_DOCOMO_Mobile

日産の電気自動車「LEAF」も「iPad」との連携を紹介していました。
次世代ナビゲーションアプリによる電気自動車とiPadの連携デモで
CAN情報を車からiPadに送り、iPadはゼンリンのルート情報などを取得することで
現在地周辺の充電施設の案内や車両情報を元に、充電施設へのナビゲートを行ってくれるとのことです。
CMでやっている、iPhoneで車の鍵をロックしているのの関連のようです。
スマートフォン&モバイルEXPO_ipad_leaf

一部マニアに人気のSlingBoxも出展していました。
フルセグ放送を自分の家からストリーミング配信するようなもので
Android端末などからアプリを通じてアクセスして、視聴します。
昔Sonyから出ていた、ロケフリの進化版です。
ちょっとほしいのですが、遊びにしては3円代はちょっと高い。。。。
ブースでは3000円割引のクーポンが配られていました。
スマートフォン&モバイルEXPO_SlingBox

マウスコンピュータはタブレットを主に展示していました。
Android3.X系かと思いましたが、残念ながら2.X系でした。
使い慣れたインターフェースですが、やはり3系のほうが大画面に適したインターフェースなのでちょっと残念。
他にもWindows7搭載のタブレットもありましたが、モバイルとして考えるとちょっと現行のWindowsでは厳しいと思います。
スマートフォン&モバイルEXPO_MouseComputer

意外と知られていない大手のアカマイテクノロジーズ合同会社も出展していました。

「インターネットの現状 2011年第2四半期レポート アジア太平洋地域」という資料をもらいました。
トラフィックの詳細リポートで、攻撃トラフィックの上位レポートや世界各国のピーク時の平均接続速度のレポートが面白いです。

平均接続速度は上位を「日本」「韓国」が独占しており、日本の57都市がエントリーされ、韓国もそれに続く数がエントリーされています。
くしくも、1位は2位は韓国に奪われましたが、3位の東海(42.3Mbps)は1位の馬山(44.4Mbps)に僅差まで迫っています。
50位の函館でも28.8Mbpsなので、気にしたことはありませんでしたが、表にしてみると日本はかなりはやいと感じました。
スマートフォン&モバイルEXPO_Akamai Technologies

海外旅行に最適なローミング可能な携帯、最近は海外でのパケット定額プランを各社用意していますが
それでも1日3000円ほどと、国内を考えると安くは無いです。
AndroidやiPhoneなどのスマートフォンは通信してナンボですので、悩ましい部分でした。
この、INTER COMMUNICATIONSのWi-Fiレンタルは海外で1日1280円からという格安の料金プランです。
USBタイプや5台まで接続できるWiFiルータタイプを用意しており各国際空港に受渡カウンターがあるので海外にいくときは良いですね。
スマートフォン&モバイルEXPO_WiFi

最後に、Yahooのリスティング広告も出展していて、ノベルティーで時計をもらいました。
スマートフォン&モバイルEXPO_Yahoo.co.jp_clock_ヤフー時計

10in1マルチ充電USBケーブル購入

会社で充電する端末(Xperia初代、iPodTouch、3DS)がもともと多くて困っていたが
最近、XperiaPlayやiPhone4白など購入してもっと増えました。

そんなのときにgigazineでふざけたケーブルが紹介されたので購入しました。
2日ほどで届いたので、さっそく開封。

10in1USB

ふざけてるな~と思いながら見てみると
一番ほしい、Micro-USB Bタイプが無い。
そのかわり、PSPなどのミニBオスが2個ついている。
10in1_ERR_USB

早速購入もとの上海問屋へ連絡して、新しいのを送ってもらいました。

10in1_USB

通信は出来ませんが、充電ケーブルには困らなくなりました。