wiredxdisplayを入れたらadbコマンドが使えなくなった

1

結論を知れば当然なのだろうけどかなりはまった。

スマホをセカンドディスプレイにできるソフトがあるときいてインストールした。wiredxdisplayというもの。かなり便利だった。
https://www.splashtop.com/wiredxdisplay
 

しかし、それを使って気分よく開発したプロジェクトをadbコマンドでインストールしようとするとエラーがでる。当初は、wiredxdisplayをいれたことの影響など考えていなかったから全く原因がわからず苦労した。

パス周りを確認すると、どうもadbの実行ファイルが2つあるということしか考えられず、adbの実行ファイルがどこにあるかしらみつぶしに調べるために

find . -name ‘adb’ 2> /dev/null

で調べてみると、

./Users/hoge/Library/Android/sdk/ndk/20.0.5594570/python-packages/adb

./Applications/Splashtop XDisplay.app/Contents/MacOS/adb

と出てきた。あぁ、そうか、スマホをセカンドディスプレイとして使用するのにadb使ってるわな、と納得し、一件落着。。バージョンおなじなら両立するのにな。。

と思ってこの記事を書いた後、試してみたら両立した!

wiredxdisplayのadbファイルのある

/Applications/Splashtop XDisplay.app/Contents/MacOS

にいって、

cp /Users/hoge/Library/Android/sdk/platform-tools/adb ./adb

でAndroidstudioのadbをコピーしたら、両立して使えるように。いや、たいへんだった。

CordovaがiOSで使えなくなる!?AppleがUIWebView をなくすことについて

1

2019年8月ごろから、cordovaで作成したアプリをアップロード すると不吉なメールが届きます.

ITMS-90809:廃止されたAPIの使用-AppleはUIWebView APIを使用するアプリの提出を受け付けなくなります。詳細については、https://developer.apple.com/documentation/uikit/uiwebviewを参照してください。

ITMS-90809: Deprecated API Usage – Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.

先日(2020年2月)にこのアプリをiOSに出したときもこのメッセージを受け取ってしまいました。
2020年3月の情報によるとUIwebviewを使ったアプリの受付は、


新規アプリ受付→2020年4月まで
既存のアプリ更新→2020年12月まで

とのことです。

詳しく公式のサイトを見ると、「class UIWebView : UIView」という宣言がだめなようです。なので今後はWKWebViewをつかうことになります。WKWebViewはUIWebViewの問題を解決するためにAppleが作ったWebViewです。UIWebViewよりクラッシュ率が低く、高速で、加えてセキュリティも高くなっているのでセキュリティを重視するAppleとしては他社に先駆けてWKWebViewへ移行するわけです。おそらく近いうちにGoogleも追随するのではないかと考えます。

Cordovaのコミュニティが対策を進めてくれているようですので、簡単にまとめます。

こちらはCordovaを管理してくれているMatt Netkowさんのページ。こちらに最新の情報が記載されています。さて、あらためてこの件についてなんといっているかについて。

Update 01/15/2020: On December 23rd, 2019, Apple clarified plans for UIWebView: “The App Store will no longer accept new apps using UIWebView as of April 2020 and app updates using UIWebView as of December 2020.” Please follow the instructions below to either update to a newer version of Cordova or migrate to Capacitor.

更新01/15/2020:2019年12月23日、AppleはUIWebViewの計画を明確にしました:「App Storeは、2020年4月の時点でUIWebViewを使用する新しいアプリおよび2020年12月の時点でUIWebViewを使用するアプリの更新を受け付けなくなります。」以下の指示に従って、Cordovaの新しいバージョンに更新するか、Capacitorに移行してください。

だいぶ前に周知してくれていたようです。結論としては、Capacitorに移行するか、新しいCordovaにアップデートすればよいようです。CordovaがコンパイルのときにUIWebviewを使わないようにCordova5.1.0から行うようです。

以前はIonicなどのはなしも記載されていたようで下記のような表をまとめたりしたのですが、

Cordova草分けであり、もっともメジャーなプロジェクト
IonicCordovaにangularを組み込むことで、UIの作業性を改善したものです。Cordovaという大きな円を書くと、Ionicはそのなかにあるイメージ。
CapaciterIonicのコンセプトをより推し進めた次世代のプロジェクト。将来的にはCordovaの次世代を担うとされていて、Ionicのメンバーもそう言っている。とはいえまだ出たばかりで洗練されてないところがある。でも使える。

最新のCapacitorを選ぶもよし、一方でCordova5.1.0にすればいいということで安心しました。Capacitorを使う方法は別に調べる人は調べると思うので、今回は最後にCordovaでなんとかしたい人向けに上記Webページの該当部分を訳して置いておきます。

WKWebViewプラグインがインストールされていることを確認してください:公式のApacheまたはIonicのいずれか。すべてのIonicスターターアプリには、cordova-plugin-ionic-webviewが自動的に含まれます。
<preference name = "WKWebViewOnly" value = "true" />をconfig.xmlファイルに追加します。
各Cordovaプラグインを最新バージョンに更新します(これらも警告をトリガーできます)。いっそのこと-不要になったら削除してください!
cordova prepare iosを実行して、変更を適用します。

わたしが作ったアプリはこちらです。写真からテキストを抽出するOCRソフトです。よかったらインストールしてみてください。

https://play.google.com/store/apps/details?id=com.rainbowsv2.ocr

無料の動画の上下切り抜き方法

1

こんな簡単なことなのに手間取った。

Avidemuxでできた。言葉は、クロップ、クロッピングというらしい

cordova-plugin-crypt-fileでcordovaをアップデートしたらビルドできない

1

cordova-plugin-crypt-fileを入れて難読化しているのだが、cordova9.0.0へバージョンアップしたらビルドできなくなった。

エラーメッセージは下記

Using "requireCordovaModule" to load non-cordova module "path" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.

バグではなく、セキュリティを高めるための仕様の変更らしい。プラグインが対応すべき問題とのことで、プラグインを最新版にすることが基本の対策とのこと。しかし、今回原因となったcordova-plugin-crypt-file 1.3.3がまだ対応していなかった。

対象のプラグイン

アプリのソースコードを暗号化するcordova-plugin-crypt-file

対処方法

これを参考に/plugins/cordova-plugin-crypt-file/hooks/after_prepare.jsをいじることで解決した。

https://github.com/PeterHdd/cordova-plugin-crypto-file/issues/8

変更前

module.exports = function(context)
{
var path = context.requireCordovaModule('path'),
fs = context.requireCordovaModule('fs'),
crypto = context.requireCordovaModule('crypto'),
Q = context.requireCordovaModule('q'),
cordova_util = context.requireCordovaModule('cordova-lib/src/cordova/util'),
platforms = context.requireCordovaModule('cordova-lib/src/platforms/platforms'),
Parser = context.requireCordovaModule('cordova-lib/src/cordova/metadata/parser'),
ParserHelper = context.requireCordovaModule('cordova-lib/src/cordova/metadata/parserhelper/ParserHelper'),
ConfigParser = context.requireCordovaModule('cordova-common').ConfigParser;

変更後

module.exports = function(context) {

    var path              = require('path'),
        fs                = require('fs'),
        crypto            = require('crypto'),
        Q                 = require('q'),
        cordova_util      = context.requireCordovaModule('cordova-lib/src/cordova/util'),
        platforms         = context.requireCordovaModule('cordova-lib/src/platforms/platforms'),
        ConfigParser      = context.requireCordovaModule('cordova-common').ConfigParser;