うさぎ駆動開発

UWP, Xamarin.Macを中心によしなしごとを書いていきます。

Microsoft MVP を初受賞しました

Microsoft MVP for Visual Studio and Development Technologies を受賞することができました。

いつもXamarin.Macの人として応援いただき,またいじっていただいたりする皆様のおかげです。 本当にありがとうございます。

Xamarin.Mac プロジェクトが Visual Studio で開けるようになったり,Xamarin.Forms が macOS 向けにも実装が進んでいたりと,面白そうなトピックが続々出てきそうです。

これからも頑張ります。今後ともよろしくお願いいたします。

AWS API Gateway Lambda proxy integration を使う

API Gatewayに,20日に新機能がリリースされました。

Amazon API Gateway に API 設定を簡素化する 3 つの新機能を追加

今まではAPI Gateway側の設定をいろいろ通ってからLambdaファンクションに到達していましたが,認証後はリクエストをするっとLambdaに流せると。 まあ便利。ということでさっそく使ったのですが,何をやっても502エラーになる。

レスポンスはこのように返しましょう。

class ApiGatewayResponse
{
    constructor(){
        this.statusCode = 200;
        this.headers = {};
        this.body = "";
    }
}

exports.handler = (event, context, callback) => {
    const res = new ApiGatewayResponse();

    // 任意のレスポンスヘッダ
    res.headers["x-custom-header"] = "foo";

    // body は string で。Objectは不可
    res.body = JSON.stringify(event);

    // context.succeed は deprecated
    callback(null, res);
};

Xamarin.iOS + AVFoundation でフロントカメラからキャプチャする

ここまでMac, UWPとやってきたのでiOSでもやってみます。 リポジトリはこちら。

github.com

Mac のコードコピペでよい

いろいろ書こうと思ったのですがほぼコピペで動きます。AVFoundationのAPIはほとんど同一です(もちろん意図的に揃えてる)。 面白くないので,あまり本質的ではないですが少し変更しましょう。

iOS 10のAPIを使う

iPhone7 Plusではカメラが増え,AVCaptureDevice.DevicesWithMediaType() では取得できません。iOS 10で追加された AVCaptureDevice.GetDefaultDevice か, AVCaptureDeviceDiscoverySession を使っていきます。

void InitCaptureSession()
{
    session = new AVCaptureSession();
    session.SessionPreset = AVCaptureSession.PresetHigh;

    // iPhone 7 Plusで全てのデバイスを列挙するなら
    // var deviceTypes = new[] { AVCaptureDeviceType.BuiltInDuoCamera, AVCaptureDeviceType.BuiltInWideAngleCamera, AVCaptureDeviceType.BuiltInTelephotoCamera};
    // var discoverySession = AVCaptureDeviceDiscoverySession.Create(deviceTypes, AVMediaType.Video, AVCaptureDevicePosition.Unspecified);
    // var devices = discoverySession.Devices;

    var defaultCamera = AVCaptureDevice.GetDefaultDevice(AVCaptureDeviceType.BuiltInWideAngleCamera, AVMediaType.Video, AVCaptureDevicePosition.Front);

    NSError error;
    var input = new AVCaptureDeviceInput(defaultCamera, out error);
    session.AddInput(input);

    photoOutput = new AVCapturePhotoOutput();
    session.AddOutput(photoOutput);
}

カメラへのアクセス許可を取得するためにAVCaptureDevice.RequestAccessForMediaTypeのほか,iOS10からはInfo.plistに下記記述が必要です。文章は何でもいいです。 f:id:ailen0ada:20160922124025p:plain

あとはmacOSのものからコピペして,NS*なものをUI*に置き換えたり,オーバーライドするメソッドをちょこっと変えたりすれば動きます。

AVFoundation で FaceTime カメラからキャプチャする

今時の Macbook には FaceTime カメラがついているので,ちょっと試しました。

リポジトリはこちら。

github.com

続きを読む

XF.MacOS で CustomRenderer を使う (初級編)

前回取りあえず動かすところまでいきました。

aile.hatenablog.com

どうもmacOS側のボタンがいまいちです。CustomRendererを使ってコントロールのスタイルを変更してみます。

続きを読む