こんにちはEveryDaySoft代表の永田です。
今回はiOSのアプリケーションをbuildしたカウント回数を測定するアプリケーションを作成しました。
作成したモチベーション プログラムというのは、日単位で進捗が出る時と進捗が中途半端な場合がありますが、build回数によっても、作成過程のプロセスが可視化されます。続けると、統計が出来始めると思います。これは結果に対してどのようにアプローチしているか、なぜその様なアプローチ頻度になっているかなどの結果が、build回数という数字として表せると考えたからです。アプリ業務をリモート推奨しているのですが、リモートに対して何らかの効果的な施策を提案する事は、必要と考えて作成しました。 想定するメリット 誰に見られて無くても、ちゃんと仕事をしているという、プログラマーの心理的な安全にも利用できるかも知れません。(逆もあるかも知れませんが、、、。) 説明が出来るプログラマーなら、例えば全デバイスのデザインで確認する必要があったためbuild回数が増える、仕様が複雑なため確認箇所が多くてbuild回数増えるなど、共有できると思います。様々なエンジニアのbuild回数統計をとると、仕様に対して効果測定が出来ると思いました。
実装前提条件 Xcode内のuuid.plistに一意の値を設定してください。 アプリをアンインストールしてもbuildカウントは測定できる。 日付が変わるとbuildカウントはリセットされる。 日付は世界基準で設定している。
iOSのサンプルソース 構成として、plistに設定した値を読み取ることでアンインストールした場合でも同じ値を取得する様にしています。標準時間の現在時刻を取得して、AWS側で最初の標準時間だけ値を取得する様にします。
https://github.com/daisukenagata/SwiftUI_DebugBuild
挙動
AWS Lambda Python3.8.0
import json import datetime import boto3 import os def lambda_handler(event, context): DYNAMO = boto3.resource('dynamodb') table_name = "pointID2" table = DYNAMO.Table(table_name) table_name2 = "pointID2" table2 = DYNAMO.Table(table_name2) list = [] list2 = [] os = event['os'] uuid = event['uuid'] dtNow = datetime.datetime.now() dtTotal = dtNow.year + dtNow.month + dtNow.day list = table.get_item( Key={ 'uuid': uuid } ) try: if not list['Item']['count']: print("list") except Exception as error: with table.batch_writer() as batch: table.put_item( Item={ 'uuid': uuid, 'count': str(0), 'time': str(dtTotal) } ) list = table.get_item( Key={ 'uuid': uuid } ) setCount = list['Item']['count'] setCount = int(setCount) setCount += 1 with table.batch_writer() as batch: table.put_item( Item={ 'uuid': uuid, 'count': str(setCount), 'time': list['Item']['time'] } ) list = table.get_item( Key={ 'uuid': uuid } ) time = int(list['Item']['time']) if time == dtTotal: return { 'statusCode': 201, 'count': list['Item']['count'], 'os': os, 'uuid': list['Item']['uuid'] } else: with table.batch_writer() as batch: table.put_item( Item={ 'uuid': list['Item']['uuid'], 'count': str(1), 'time': str(dtTotal) } ) table2_total = list['Item']['count'] table2_total = int(table2_total) - 1 with table2.batch_writer() as batch: table2.put_item( Item={ 'time': str(dtNow), 'uuid': list['Item']['uuid'], 'total': str(table2_total) } ) list2 = table2.get_item( Key={ 'time': str(dtNow) } ) return { 'statusCode': 200, 'count': str(1), 'os': os, 'total': list2['Item']['total'], 'time': list2['Item']['time'], 'uuid': uuid }
DynamoDbの設定

ApyGateWay

以上の対応で、実装条件を満たせたと思います。 日付が変更した際に値が自動で変わるか確認が必要になります。 貴重なお時間お読み下さいまして、誠にありがとうございます。
No responses yet