[副業] 写真・動画共有アプリの保守開発

【チーム構成】私のみ

【役割】アプリの保守運用、機能開発aa

【技術】Swift 5.5, Xcode 13.0, Storyboard, UIKit, Alamofire, SwiftGen, Bitbucket

【概要】

企業のインハウス向けiOSアプリの開発を引き継ぎました。毎年のSwift/Xcodeのバージョンアップ対応、および、都度相談にて機能開発を行う予定です。直近では、アルバム指定機能、動画撮影機能、バックグラウンドアップロード機能などを開発しました。

概要

企業のインハウス向け iOS アプリの開発を引き継ぎました。毎年の Swift / Xcode のバージョンアップ対応、および都度相談に応じた機能開発を実施。直近では、アルバム指定機能、動画撮影機能、バックグラウンドアップロード機能などを開発しました。

【Pick Up】AVCaptureOutputの増加防止

写真撮影機能だけが実装されていて、音あり撮影/音無し撮影の2つの機能がありました。音ありはPhotoOutputを利用し、音無しはVideoDataOutputを利用していました。ここに動画撮影機能を付け加えると、3つ目のOutputができますが、そのまま手を加えると実装が肥大化し、保守性がかなり厳しくなっていくと感じました。 対策として、写真の音無し撮影にはPhotoOutputをそのまま利用するように変更し、AudioServicesDisposeSystemSoundIDの指定で音を消す実装に変更しました。影響として、シャッターボタンの連打対策が必要となってしまいましたが、Outputの管理が増えることなく、動画撮影機能を加えることができました。

【Pick Up】Backgroundアップロードの直列化

かつてはBackgroundアップロードに対応していたはずが今はできていない、という要望から、調査・対応を行いました。Alamofire v5からバックグラウンドセッションに対応しなくなったことが要因でしたので、Alamofireで書かれていた処理をURLSessionで実装し直しました。 ただ、そのままの実装では並列で複数のリクエストが投げられてしまい、サーバー側でエラーが発生してしまいました。その対策として、OperationQueueのmaxConcurrentOperationCountを指定して直列に実行されるようにし、earliestBeginDateを指定してタスク開始を遅延させたりと、リクエストの投げ方を工夫してエラーを回避しました。