こんにちは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

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