2013年6月12日水曜日

Windowsストアに公開するアプリをJavaScriptで実装してはならない

オープンソースで問題ない方は無視してください。

WindowsストアアプリをHTML/JavaScriptで実装すると、簡単にリバースエンジニアリングされてしまいます。あまりにも簡単にWindowsストアアプリのソースが見えてしまったので、念のための注意喚起。

【手順】
  • VisualStudio2012を起動する。(Expressでも可)
  • 「デバッグ」メニュー → 「インストールされているアプリケーションパッケージのデバッグ」を選択
  • 「このコードの種類をデバッグ」が「スクリプトのみ」となっているアプリを「インストールされているアプリケーションパッケージ」から選択
  • 「start」で実行

ここまでソースが簡単に見られてしまうと、悪意を持ったユーザに狙われてしまう懸念があります。現に、Androidではアプリの改ざん(偽アプリの配布)が問題になっています。

C#で実装してもリバースエンジニアリングは不可能ではないですが、JavaScriptよりは難しいと思います。

少なくとも、業務アプリをHTML/JavaScriptで実装して、Windowsストアから配布するのは無し、かと。

2013年3月9日土曜日

Windows8 64BitにSO-01Bのドライバ導入

Androidアプリを開発することになり、久しぶりにSO-01B(初代Xperia) を使おうとしたときのメモ。
使っているOSはWindows8 Professional 64Bit版。

問題点は2点。

■Win8用のドライバが無い
Android SDK用の標準ドライバをちょっといじればOK。
  • コンピューターの管理 ⇒ デバイスマネージャー ⇒ 不明なデバイスを開く
  • プロパティの[詳細]タブ ⇒ [ハードウェアID]プロパティをメモ
  • Android SDKのドライバをいじる
    • sdk\extra\google\usb_driver\android_winusb.infをメモ帳で開く
    • [Google.NTx86] セクションと[Google.NTamd64] に追加

私の場合はこんな感じ。

[Google.NTamd64]
;Xperia X10 SO-01B
%SingleAdbInterface% =  USB\VID_0FCE&PID_612E&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_0FCE&PID_612E&REV_0224&MI_01


■Windows8 64bitの場合、署名なしドライバがセットアップできない
以下のサイトを参考に、テストモードにしてからドライバをインストールすればOK。

http://freesoft.tvbok.com/win8/testmode.html


2013年3月6日水曜日

Windows8 プロキシ設定

プロキシ経由では、WindowsストアやWindowsDefenderの更新時にエラーが発生するようです。
IEのプロキシ設定をするだけではダメ。

【手順】

  • InternetExplorerのインターネットオプション ⇒ 接続 ⇒ LANの設定を開く
  • プロキシサーバーランに、アドレスとポートを設定  ※自動構成ではダメ
  • 管理者権限でコマンドプロンプトを開き、以下のコマンドを実行
    • netsh winhttp import proxy source=ie
これでいけるはずです。

デスクトップモードを持たないWindowsRTの場合ってどうするんでしょうね。
他にもいろいろと問題ありそうですし。

■Using authenticated proxy servers together with Windows 8

完全に失敗作ですな。Windows8は。

2013年2月23日土曜日

WindowsストアアプリとWindowsデスクトップアプリの使い分け


Windows8からアプリケーションの種類に、従来からあるアプリの「デスクトップアプリ」の他に、「Windowsストアアプリ」(旧Metroスタイルアプリ)が増えました。

しかし、必ずしも全てのアプリをWindowsストアアプリで開発する必要はなく、今後もアプリの内容に応じてデスクトップアプリとWindowsストアアプリを使い分けるべきとMicrosoftは言っています。

何を基準に使い分けるのか、その説明が非常に分かりにくいため、整理してみました。

【開発者の観点から見た使い分けの基準】
  • Windowsストアアプリ
    • ストアでのアプリ配布を行える ※デスクトップアプリもストアで紹介のみは可能
    • マネタイズができる ※アプリの有償販売、課金、アプリ内広告配信が可能
    • カメラやGPSなど、デバイスの機能を簡単に利用したい
    • スワイプやピンチズーム等、タッチ操作を生かしたアプリを楽に開発したい
    • WindowsRT(ARM版Windows)にも対応したい
    • HTML/CSS/JavaScriptを使って開発したい
  • デスクトップアプリ
    • 既存の資産を生かしたい。
      • 既存のロジックやライブラリ(有償、無償)をそのまま利用したい。
      • WinフォームやWPFを使って開発した既存アプリを作り直したくない。
    • スキャナなどのWinRTでは対応していない周辺機器を扱いたい。
    • Windows7などにも対応したい。

【注意事項
  • そもそも、Windowsストアアプリやデスクトップアプリで開発せず、Webアプリケーションとして実装することも選択肢の一つ。
  • Windowsストアアプリ(WinRT)は、iOSアプリによく似ている。
    • セキュリティの観点から、アプリにできる機能が大幅に制限されている。
    • 直接アプリ間で通信したりデータを受け渡すことができない。
    • アプリ間の連携は検索やシェア等のOSの機能を経由して行う。
    • ストア公開は審査が必要。ストアに公開せずにアプリを配布することはできない。
  • Windowsストアアプリの場合、アプリの配布が大変。
    • ストアに公開する場合、アカウント登録(有償)や審査が必要。
    • ストアに公開せずにアプリを配布する方法は、企業向けの方法しかない。
      • ストアを介さずに個人を対象にしたアプリを配ることができない。
      • 企業向けには、サイドローディングという方法があるが、これがまた非常に分かりづらい。また、追加ライセンスの購入等、追加出費が必要。
    • アプリはユーザー単位にインストールする必要がある。
      • (従来の)デスクトップアプリでは、一人のユーザーがセットアップすれば他のユーザーも使うことができる。
      • Windowsストアアプリの場合は、1台のPCを複数人のユーザーで共有している場合、ユーザーごとにインストール作業が必要になる。
  • キオスク端末のような、不特定多数が触る端末ではWindowsストアアプリは向かない。チャームやアプリバーの制御ができない(無効化できない)ため。

Windowsストアアプリの場合、注意事項が多くて大変です。

ストアに公開したい、とか、タッチ操作に最適化したい、というような明確な目的が無い限り、デスクトップアプリやWebアプリとして実装した方が無難と思います。

OSはWindows8だけではない訳ですから。

Windowsストアアプリ開発 XAML vs HTML


Windowsストアアプリを開発する場合、開発言語が一つの悩みです。

  • 方法1;HTML/CSS とJavaScript で開発
  • 方法2;XAML と C#、Visual Basic、またはC++ で開発

結論からいうと、業務アプリ開発者(特に.NET/Java開発経験者)にはXAMLが良いかと。
開発言語はC#。

以下、私見。

■方法1;HTML/CSSと JavaScript で開発

  • 概要
    • UI(View)はHTML/CSSで実装する。
    • ロジックを主にJavaScriptで実装する。
  • 適しているアプリ
    • 一般コンシューマー向けのアプリ
      • 完全新規の開発。既存のしがらみが無い。
      • 開発者がHTML/CSS、JavaScript開発に慣れている。
  • 生産性の観点
    • 業務アプリ開発の場合、開発者にまともなJavaScriptプログラミングをできる人はどれだけいるのか、懸念。
      • 例えば、プロトタイプベースの概念を理解している開発者がどれだけいるのか。
      • Javaの開発経験しか無いとしても、C#の方がJavaScriptよりJavaに良く似ているので習熟が容易。Javaの開発経験しかなければ、C#がお勧め。
    • HTML/CSS/JavaScriptに慣れた開発者であっても、MS独自のJavaScriptライブラリ(WinJS) と CSSスタイルセットの学習は必要。
    • VisualStudioだけではGUIを使った画面開発ができない。
      • VisualBasic/VisualStudioを使って画面開発をすることになれた開発者にはデザインが大変。
      • HTML/CSSを手書き、または、BlendやDreamweaverのようなHTMLオーサリングツールを使う必要があるため。
  • その他
    • リバースエンジニアリングされやすい。
      • アプリのパッケージをZip解凍するとソースが丸見え。
      • ソースコード内のコメント行もそのまま残る。(不用意なことを書けない)
      • JavaScriptの圧縮と難読化が必要か。(だが、圧縮&難読化にはリスクあり)
    • ソースコード等の既存資産の流用は大変。
      • 仮に既存のロジックが.NETのクラスライブラリとしてきれいに分離、流用できる状態にあっても、流用は大変。.NETのクラスライブラリは使えないため、Windows ランタイム コンポーネントに移植が必要となるため。
    • HTML/CSS/JavaScriptで行くなら、PhoneGapの活用も要検討?(未調査)

■方法2;XAMLとC#、Visual Basic、またはC++ で開発

  • 概要
    • UI(View)はXAMLで実装する。
    • ロジックをC#(またはVisual Basic、C++)で実装する。
      • 開発言語は特に理由が無ければC#がお勧め。サンプルプログラム等の情報が最も多いため。
      • Visual BasicやC++は実装サンプルが少ないため、C#のサンプルを読解、移植する手間がかかる。
  • 適しているアプリ
    • 業務アプリ
      • .NETで作られた既存のロジックを流用したい。
      • 開発者がC#、Javaなどオブジェクト指向言語の開発に慣れている。
  • 生産性の観点
    • GUI開発がVisual Studioで完結。Blendも複雑なデザインが要らなければ不要。
    • 素のJavaScriptの生産性より、.NET(C#、VB)の方が生産性が高い。
      • Linq、XML、JSON etc.. 豊富なクラスライブラリが標準で使える。
      • 型付言語なのでコードアシスト(intellisense)が強力に効く。リファクタ機能もあり。
      • 非同期処理の実装が楽。 (await/async)
    • 共通部品化(ユーザーコントロール、カスタムコントロール)が簡単。
  • その他
    • 既存の.NETクラスライブラリが利用・流用できる。
      • Windows ランタイム コンポーネントに移植する必要は無い。
      • 既存のロジックがクラスライブラリ化されている場合、あまり修正する必要が無く流用できる可能性がある。
      • ただし、WinRT用の.NETは従来の.NETから機能削減されている機能があるため、一部修正が必要なこともある。


※参考にしたサイト


コメント欄も良く読んだ方が良いと思います。


2013年1月16日水曜日

Windowsストアアプリによる業務アプリ開発

WinRTをつかったWindows8のアプリ(Windowsストアアプリ)の開発方法を調べていたんですが、開発者向けの情報が少ないです。

サンプルアプリとか開発入門とかはそれなりに情報があるんですけど、網羅的な情報が無いのでいざ業務で使うような本格的なアプリケーションを作ろうとすると不足している情報が多いという印象です。まあiOSとかAndroidも同じような状況ですので、WinRTだけがダメという問題では無いと思いますけど。

例えば、入力画面の入力チェックとか、どうすればよいんだろう。
ASP.NETとかSilverLightなら、入力フォームに対するバリデーターの仕組みがありそれを使えば良かったんですけど、WinRTにはその仕組みが無い、どうしましょ、とか。

逆に、サーバーサイドは選択肢多すぎて困っちゃう。
JSON使う?XML使う?フレームワークにはWCF使う?WebAPI使う?、まあ、そもそもWindows(.NET)じゃなくても良いよね、とか。

これからちょっと色々とまとめていこうと思います。


2012年4月3日火曜日

直線距離スナイパー


Androidアプリを公開しました。
不定期にバージョンアップしていく予定です。

http://play.google.com/store/apps/details?id=jp.blogspot.makejp.distancemeter

GPSを利用して出発地から現在地までの直線距離を表示するアプリです。
また、地図をスクロールすると現在地から指定した位置までの距離を見ることもできます。

位置ゲーのコロプラ(コロニーな生活)で効率的に位置登録するために作りました。

【使い方】
1.出発地からの直線距離
・アプリを起動した場所から現在地までの直線距離を表示します。
・[ここから出発]ボタンをタッチすると表示している地図の中心が出発地となり距離がリセットされます。

2.現在地からの直線距離
・地図をスクロールすると表示している地点までの直線距離が表示されます。
・[現在地に戻る]ボタンをタッチすると現在地に戻ります。

【注意事項】
・屋外などGPSが受信できる場所で利用してください。
・ディスプレイを表示しているとバッテリーを大量に消費します。外部電源を接続するか、こまめにディスプレイを消して利用してください。

【今後のバージョンアップ予定】
・現在地の住所を表示する機能を追加
・一定距離を移動したときにアラートする機能を追加