iOS10でカメラを使うためプライバシー設定

以前に作ったカメラのアプリがいつのまにか動かなくなってて焦りました。

MediaPluginのTakePhotoAsyncメソッドを呼ぶとSIGABRTで落ちてしまいます。

 

色々調べた結果、iOS10の仕様変更が原因っぽいことがわかりました。

 

blog.xamarin.com

 

を見ると、info.plistにカスタムプロパティにNSCameraUsageDescriptionのキーを作りなさいとあります。

VSでinfo.plistを開いてもカスタムプロパティを設定する場所が見つかりません…

仕方ないので、info.plistをxmlエディタで開いて上記の記事のとおり下記の行を挿入します。

 

<key>NSCameraUsageDescription</key>

<string>This app needs access to the camera to take photos.</string>

<key>NSPhotoLibraryUsageDescription</key>

<string>This app needs access to photos.</string>

 

 

で、ビルドして実行…動いた。よかった。(^^)

 

 

 

Xamarinからカメラを使う

Xamarinからカメラを使うには、MediaPluginというプラグインを使うのが超便利です。

github.com

 

機種依存コードを書かなくても、PCLのコードだけでカメラ制御ができます。

iOSだと、カメラ使うにはユーザの確認を要求することが必要ですが、その辺も勝手にやてくれます。

 

コードはPCLのプロジェクトだけでいいですが、プラットフォームのプロジェクトにもMediaPluginを参照設定しておきましょう。

参照設定がないと、NotImplementの例外が発生します。

 

 

XamarinでiPhoneアプリをビルドしてみる

とりあえずXamarinでiOSアプリを作ってみます。

HelloWorldでは面白みがないので、時計のアプリでも作ってみます。

 

1. Visual Studioで新規ソリューションを作成します。
テンプレートは「iPhoneのSingle View App(iPhone)」を選びます。

名前は「SimpleClock」にしておきます。

f:id:FM77AV:20160123174850p:plain

2.「ツール-オプション」メニューで、Xamarinの「iOS Setting」のページを開きます。 f:id:FM77AV:20160123174957p:plain

3.リモートビルド用のMacに接続します。接続する際、MacのログインID、パスワードを入力します。

f:id:FM77AV:20160123175231p:plain

4.Main.storyboardを開きます。ViewはiPhone6、iOS9.2を選びます。

f:id:FM77AV:20160123180603p:plain

5.左のツールボックスからLabelを選んで貼り付けます。フォントサイズを適当に大きくし、Name属性には「labelTime」と入力します。

f:id:FM77AV:20160123181015p:plain

6.ViewControl.csを開き、下記のとおり編集します。

using System;
using System.Timers;

using UIKit;

namespace SimpleClock
{
    public partial class ViewController : UIViewController
    {
        Timer timer;

        public ViewController(IntPtr handle) : base(handle)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.

            // 画面の初期化
            updateContorol();

            // 1秒ごとに画面を更新する
            timer = new Timer(1000);
            timer.Elapsed += ((source, e) =>
            {
                InvokeOnMainThread(() => {
                    updateContorol();
                });
            });
            timer.AutoReset = true;
            timer.Enabled = true;
        }

        public override void DidReceiveMemoryWarning()
        {
            base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }

        private void updateContorol()
        {
            labelTime.Text = DateTime.Now.ToLongTimeString();
        }
    }
}

 

 7.「iPhoneSimulator」、「iPhone 6 iOS 9.2」を選びデバッグ実行します。

f:id:FM77AV:20160124232434p:plain

8.Mac側でiPhoneシミュレータが起動し、アプリが起動します。

f:id:FM77AV:20160124232054p:plain

Visual StudioでiOSアプリ 環境準備

Visual StudioiOSをビルドするための準備。

 

■Xamarinのエディション

Xamarinは有償ですが、いきなり購入する財力はないので無償のStartarエディションというのを利用します。無償な代わりにビルドできるサイズに制限があったり、使えない機能があったりするようです。

 

■準備

下記を準備します。

残念ながらWindowsだけでは開発できず、Macが必要らしいです。

自分はMacBookPro 13inch(2011 later)の一番安いやつ を利用しています。

 

Visual Studioのダウンロード

Visual Studio Community 2015をダウンロードしてインストールします。

個人利用なら無料で利用できます。

いい時代になったものです。

www.visualstudio.com

 

Windows用Xamarinインストール

Visual StudioにはWindows版Xamarinが同梱されてますがバージョンが古いため、この後ダウンロードする iOS版に接続できません。

そのため下記のサイトからWindows版Xamarinをダウンロードしてインストールする必要があります。

 

Mac環境の準備

Macで下記のサイトにアクセスしてXamarinをインストールします。

 http://xamarin.com/download

 

Mac接続用設定

Mac側でリモート接続のための設定が必要です。

  1. システム環境設定-共有を開きます。
  2. 「リモートログイン」を「すべてのユーザ」で有効にします。

 

これで準備完了です。

Visual StudioでiOSアプリ開発

iOS/Android/Windows アプリ開発 - Visual StudioによるとVisual StudioiOSアプリを作る方法は2種類あるらしい。

  1. Monacaを使う方法
  2. Xamarinを使う方法

お手軽なのはMonacaを使う方法。

  • 実装はHTML5+Javascript
  • PhoneGapで端末のデバイスにも一通りアクセスできる。
  • iOS用のデバッガーを使えば、簡単に実機での動作確認ができる。

ほんのちょっと使ってみましたが、なかなか面白いです。

でもHTML/Javascriptはちょっと苦手なのです…

 

一方、XamarinはC#+XAMLで開発ができるとのこと。自分が求めてたのはこちら。

というわけで、Xamarinでなんか作ってみよう!

 

 

 

 

Windows開発者のiOSアプリ開発

ちょっと前にiOSアプリを作ろうと思ったことがあるのですが、途中で投げ出してしまいました。

投げ出した理由は…

  1. 自宅のMacBookProが非力なせいか、XCodeが重くてストレスたまる…
  2. ObjectiveCのシンタックスにどうしても馴染めない…
  3. Swiftは新しい言語だけあっていけてるけど、今更新しい言語を習得するのも無駄な気がして仕方ない…
  4. XCodeの操作が直感的じゃなくて使いづらい。ローカライズもされてないし…

で、最近はVisual StudioiOSアプリが作れるらしいじゃないですか!

ちょっと面白そうということで調べてみることに…