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でもやってみます。 リポジトリはこちら。
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に下記記述が必要です。文章は何でもいいです。
あとはmacOSのものからコピペして,NS*
なものをUI*
に置き換えたり,オーバーライドするメソッドをちょこっと変えたりすれば動きます。
AVFoundation で FaceTime カメラからキャプチャする
今時の Macbook には FaceTime カメラがついているので,ちょっと試しました。
AVFoundationすげえよやっぱここまでは簡単だもの #Xamarin pic.twitter.com/XUHNPXct6X
— Tsubasa HIRANO (@ailen0ada) 2016年9月13日
リポジトリはこちら。
続きを読む