2016年10月18日火曜日

Xamarinを使った開発でNuGetのパッケージを作るならWindows側で行う方がよさそう

Xamarinを使ったアプリ開発で「共通ライブラリ」的なものを作ることになりました。

複数のアプリで同じコードを使い回せるようにしたかったからです。

  • 自作のネイティブライブラリ(Binding Library)のDLL(iOS, Android)
  • Binding Libraryを使うXamarin.NativeのDLL(iOS, Android)
  • PCLのDLL
これらのファイルをnuspecに書いて、JenkinsからXamarin Studio(Mac)側のNuGetでpackしました。

そして出来たnupkgファイルをローカルにおいてVisual Studioで読み込ませてみようとしました。

・・・が、できません。表示されないのです。

Simple NuGet Severで構築したサーバにPushするとインストールはできるのですが、アンインストールや更新ができません。(metadataが読めない的なエラーが出る)

別に作った、Binding Libraryがないnupkgだと普通にアンインストールも更新もできます。

ちょっとワケが分からなかったのですが、色々試した結果、Windows側のNuGetでpackすると多少マシになりました。

「インストール済み」を見ようとするとエラーが表示されるのですが、とりあえずパッケージを選んでアンインストールしたり更新したりはできるようになりました。

Macで作成したnupkgとWindowsで作成したnupkgを展開してdiffしてみると、テキストファイルの改行コードが一部異なったりして(これはGitの影響かもしれないけど)、まぁ違うんだなーと。

あとNuGetのバージョンもMacのほうは2.12で、Windowsのほうは3.4と異なるので、とりあえずWindowsでpack, pushするようにしました(Jenkinsおじさんが)

なんというかMSDN付きで良かったと思う、今日この頃です。


2016年10月4日火曜日

ファーウェイの端末はFLAG_ONGOING_EVENTやsetOngoingしても通知が消せる

最近HUAWEIのhonor 8をメイン端末にしました。

そこで気づいたのですが、愛用しているアラームアプリが通知領域からすぐに消えてしまっています。

アプリを起動すると通知が表示されるのですが、フリックすると消えてしまうのです。

あれ?と思って実際に作って試してみたのですがNotificationにFLAG_ONGOING_EVENTをセットしても消せました。

それならとNotificationCompat.BuilderでsetOngoing(true)してみましたが同様です。

もしかしてAndroid 6.0あたりで変わったのか?とも思いましたが、Galaxyなどでは普通に消せません。

ここで気づいたのですが「すべて消去(ごみ箱ボタン)」では消えません。
通知すべてがsetOngoingしてある場合はごみ箱も表示されません。

というわけで、とりあえずの結論としては「ファーウェイの端末だと手動で通知が消せてしまう」ようです。

なお手元のHuawei MediaPad T1 7.0(4.4.2)で通知を消そうとすると『この通知を消去すると、送信中のアプリケーションで例外が発生します。消去しますか?』という警告ダイアログが表示されました。

honor 8だと表示されないので、例外も出ていないのでしょうか。