SwiftUI_DebugBuild

こんにちはEveryDaySoft代表の永田です。
今回はiOSのアプリケーションをbuildしたカウント回数を測定するアプリケーションを作成しました。
作成したモチベーション

プログラムというのは、日単位で進捗が出る時と進捗が中途半端な場合がありますが、build回数によっても、作成過程のプロセスが可視化されます。続けると、統計が出来始めると思います。これは結果に対してどのようにアプローチしているか、なぜその様なアプローチ頻度になっているかなどの結果が、build回数という数字として表せると考えたからです。アプリ業務をリモート推奨しているのですが、リモートに対して何らかの効果的な施策を提案する事は、必要と考えて作成しました。

想定するメリット

誰に見られて無くても、ちゃんと仕事をしているという、プログラマーの心理的な安全にも利用できるかも知れません。(逆もあるかも知れませんが、、、。)
説明が出来るプログラマーなら、例えば全デバイスのデザインで確認する必要があったためbuild回数が増える、仕様が複雑なため確認箇所が多くてbuild回数増えるなど、共有できると思います。様々なエンジニアのbuild回数統計をとると、仕様に対して効果測定が出来ると思いました。
実装前提条件

Xcode内のuuid.plistに一意の値を設定してください。
アプリをアンインストールしてもbuildカウントは測定できる。
日付が変わるとbuildカウントはリセットされる。
日付は世界基準で設定している。
iOSのサンプルソース

構成として、plistに設定した値を読み取ることでアンインストールした場合でも同じ値を取得する様にしています。標準時間の現在時刻を取得して、AWS側で最初の標準時間だけ値を取得する様にします。

https://github.com/daisukenagata/SwiftUI_DebugBuild

挙動
https://twitter.com/i/status/1343413358884614144
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
以上の対応で、実装条件を満たせたと思います。

日付が変更した際に値が自動で変わるか確認が必要になります。

貴重なお時間お読み下さいまして、誠にありがとうございます。