iOS
python3
plist
AWSLambda
OriginalQuad incDay 22

Pythonでplistバイナリを出力

概要

  • AWS LambdaでJSONファイルを出力し、それをiOSのアプリケーションで読み込ませた
  • iPadが古い(初代iPad Air)のと、諸々の事情で25万レコードを1ファイルに持つ必要があり、JSONだとパースのときに死ぬ
  • plistのバイナリにしたらパース不要で負荷も低減:v:
JSON plistバイナリ
ファイルサイズ 12MB 7MB
メモリ使用量 112MB 45MB

※ファイルサイズはその後の調整でJSONでもそれほど変わらなくなったので、サイズに関してはあまり期待しないほうがよいかも

Pythonでplistバイナリを出力する

plistlibを使います。

plistlib.dump(value, fp, *, fmt=FMT_BINARY, sort_keys=True, skipkeys=False)
import plistlib

:

def save_to_plist(data):
    data_set = []
    for record in data:
        data_set.append(
            (
                record['code'],
                record['name']
            )
        )
    save_path = "/tmp/article.plist"
    with open(save_path, "wb") as fp:
        plistlib.dump(data_set, fp, fmt=plistlib.FMT_BINARY, sort_keys=True, skipkeys=False)
    return save_path

これだけです。簡単ですね