$30 off During Our Annual Pro Sale. View Details »

楽しい夏休み!String Catalogs で新しい発見

ojun
August 24, 2023

楽しい夏休み!String Catalogs で新しい発見

ojun

August 24, 2023
Tweet

More Decks by ojun

Other Decks in Programming

Transcript

  1. ެ։ SwiftWednesdayʲiOSDC Japan 2023 ௚લʳ
    2023/08/24 @DeNA
    ָ͍͠ՆٳΈʂ

    String Catalogs Ͱ৽͍͠ൃݟ
    ojun - DeNA Co., Ltd.

    View Slide

  2. ࣗݾ঺հʢPKVOʣ
    w ໊લPKVO
    w J04ΤϯδχΞ
    w ೥৽ଔೖࣾ
    w ࠃޠ͸4XJGU
    @ojun_9

    View Slide

  3. String Catalogsͱ͸

    View Slide

  4. String Catalogsͱ͸
    Xcode 15͔Βར༻Ͱ͖ΔϩʔΧϥΠζΛߦ͏ͨΊʹ༻͍ΒΕΔϑΝΠϧ
    ϑΝΠϧͷ֦ுࢠ͸ .xcstrings
    Xcode 15 ͔Β͸Legacyѻ͍ʹ Xcode 15 ͔Βར༻Մೳ
    ͜Ε·Ͱ͸ .strings / .stringdict ϑΝΠϧ͕ར༻͞Ε͍ͯͨ

    View Slide

  5. String Catalogsͱ͸
    Discover String Catalogs / https://developer.apple.com/videos/play/wwdc2023/10155/

    View Slide

  6. String Catalogsͱ͸
    Discover String Catalogs / https://developer.apple.com/videos/play/wwdc2023/10155/

    View Slide

  7. String Catalogsͱ͸
    ϏϧυΛߦ͏ͱ௥Ճͨ͠

    Localizable.xcstringsϑΝΠϧͷ

    த਎͕ࣗಈతʹੜ੒͞ΕΔ

    View Slide

  8. String Catalogsͱ͸
    .xcstringsϑΝΠϧͷத਎͸JSON

    View Slide

  9. String Catalogs ʹ͓͚Δٙ໰
    .xcstringsϑΝΠϧΛར༻͢ΔͱϏϧυ੒Ռ෺ʢ.ipaʣʹมԽ͕ੜ͡Δͷ͔ʁ
    ҧ͍͸͋Δͷ͔ʁ
    Ϗϧυ
    Ϗϧυ

    View Slide

  10. .ipa ϑΝΠϧͷมԽΛ؍࡯͢Δ
    ̎ͭͷprojectΛ࡞੒ͯ͠ҧ͍ΛݟΔ

    View Slide

  11. Legacy: .stringsϑΝΠϧͷ৔߹
    .stringsϑΝΠϧΛ࡞੒͠ɺӳޠͱ೔ຊޠͷϩʔΧϥΠζΛߦ͏
    ϩʔΧϥΠζΛߦ͏จݴ͸ҎԼͷ̎ͭ

    View Slide

  12. New: .xcstringsͷ৔߹
    .xcstringsϑΝΠϧΛ࡞੒͠ɺӳޠͱ೔ຊޠͷϩʔΧϥΠζΛߦ͏
    ϩʔΧϥΠζΛߦ͏จݴ͸ઌ΄ͲͷจݴͱಉҰʹ͢Δ

    View Slide

  13. .ipaϑΝΠϧͷத਎ .stringsϑΝΠϧͷ৔߹
    ύοέʔδͷத਎͸ҎԼͷ௨Γ
    en.lprojͱja.lprojͷϑΥϧμ͕ೖ͍ͬͯΔ͜ͱ͕Θ͔Δ
    􀇻
    􀇻

    View Slide

  14. .ipaϑΝΠϧͷத਎ .stringsϑΝΠϧͷ৔߹
    ֤ .lproj ϑΥϧμͷதʹ͸ Localizable.string ϑΝΠϧ͕֨ೲ͞Ε͍ͯΔ
    ϑΝΠϧͷத਎͸όΠφϦܗࣜʹม׵͞Ε͍ͯΔ
    bplist00“_Hello

    SwiftWednesday

    [Hello World


    $

    View Slide

  15. .ipaϑΝΠϧͷத਎ .xcstringsϑΝΠϧͷ৔߹
    Legacyͷ৔߹ͱ͸ҟͳΓɺen.lprojϑΝΠϧ͕ଘࡏ͠ͳ͍͜ͱ͕Θ͔Δ
    ja.lproj ϑΝΠϧͷΈ͕ଘࡏ͢Δ
    􀇻

    View Slide

  16. .ipaϑΝΠϧͷத਎ .xcstringsϑΝΠϧͷ৔߹
    ϑΥϧμͷத਎ΛݟΔͱ Localizable.strings ϑΝΠϧ͕ଘࡏ͍ͯ͠Δ
    􀇻

    View Slide

  17. .ipaϑΝΠϧͷத਎ .xcstringsϑΝΠϧͷ৔߹
    ϑΥϧμͷத਎ΛݟΔͱ Localizable.strings ϑΝΠϧ͕ଘࡏ͍ͯ͠Δ
    􀇻
    .xcstrings ϑΝΠϧΛར༻ͯ͠΋ .ipa ʹ͸ .strings ϑΝΠϧ͕ଘࡏ͍ͯ͠Δ
    .xcstrings ϑΝΠϧͰ͸ͳ͍!

    View Slide

  18. ͜Ε·Ͱ͸
    .ipaϑΝΠϧΛ࡞੒͢Δͱɺͦͷதʹ .stringsϑΝΠϧ͕࡞ΒΕΔ
    .ipa ʹଘࡏ͢Δ .string ϑΝΠϧͱݩͷ .string ϑΝΠϧͷத਎͸ҟͳΔ
    ϩʔΧϥΠζ͢Δݴޠ෼͚ͩੜ੒͞ΕΔ
    ։ൃத Ϗϧυ .ipa
    όΠφϦͱͯ͠දݱ

    View Slide

  19. ͜Ε͔Β͸
    .ipaϑΝΠϧΛ࡞੒͢Δͱɺͦͷதʹ .stringsϑΝΠϧ͕࡞ΒΕΔ
    .string ϑΝΠϧͷத਎͸όΠφϦ
    ੜ੒͞ΕΔϑΝΠϧ਺͸࣮૷ʹΑͬͯ͸ݮগ͢Δ
    Ϗϧυ
    ։ൃத .ipa
    όΠφϦͱͯ͠දݱ

    View Slide

  20. ͜Ε͔Β͸
    .ipaΛ࡞ΔաఔͰ .xcstringsϑΝΠϧΛ .stringsϑΝΠϧʹม׵͍ͯ͠Δ
    ม׵
    ։ൃத Ϗϧυ ipa

    View Slide

  21. ͜Ε͔Β͸
    .ipaΛ࡞ΔաఔͰ .xcstringsϑΝΠϧΛ .stringsϑΝΠϧʹม׵͍ͯ͠Δ
    ม׵
    ։ൃத Ϗϧυ ipa
    xcstringstool

    View Slide

  22. xcstringstoolΛ୳Δ

    View Slide

  23. xcstringstool ֓ཁ
    w 5PPM͕ଘࡏ͢Δ৔ॴ
    w 9DPEFBQQ$POUFOUT%FWFMPQFSVTSCJO
    w FYFDϑΝΠϧ
    w YDTUSJOHTϑΝΠϧͷૢ࡞Λߦ͏
    w 9DPEF͔Β௥Ճ͞Εͨ

    View Slide

  24. xcstringstool ֓ཁ

    View Slide

  25. xcstringstool ֓ཁ
    w αϒίϚϯυΛೖΕ࣮ͯߦ͢Δ
    w αϒίϚϯυ͸̏ͭ
    w QSJOU
    w DPNQJMF
    w TZOD

    View Slide

  26. αϒίϚϯυ print ʹ͍ͭͯ
    ֓ཁ: xcstringsϑΝΠϧʹදࣔ͞ΕΔ͢΂ͯͷ

    จࣈྻΩʔΛදࣔ͢Δ
    xcstringstool print fi
    le>
    ࢖͍ํ
    Ҿ਺ fi
    le> දࣔ͢Δ.xcstringsϑΝΠϧ΁ͷύε
    Φϓγϣϯ -h —help ϔϧϓ৘ใΛදࣔ

    View Slide

  27. printͷ࢖༻ྫ
    $ ./xcstringstool print ~/Desktop/Localizable.xcstrings


    Hello SwiftWednesday


    Hello World
    ίϚϯυΛར༻͢Δͱ .xcstrings ϑΝΠϧʹଘࡏ͍ͯ͠Δ Key ͕ग़ྗ͞Ε͍ͯΔ

    ͜ͱ͕Θ͔Δ

    View Slide

  28. αϒίϚϯυ compile ʹ͍ͭͯ
    ֓ཁ: .xcstringsϑΝΠϧͷϏϧυ੒ՌʢίϯύΠϧ݁ՌʣΛੜ੒͢Δ
    ࢖͍ํ xcstringstool compile

    fi
    le> \

    --output-directory \

    --format ɹ \

    --language … \

    --serialization-format \

    --dry-run
    option
    Ҿ਺ fi
    le> ίϯύΠϧ͢Δ.xcstringsϑΝΠϧ΁ͷύε

    View Slide

  29. αϒίϚϯυ compile ʹ͍ͭͯ
    -o --output-directory ग़ྗϑΝΠϧΛ഑ஔ͢ΔσΟϨΫτϦ


    -f --format ίϯύΠϧͷग़ྗܗࣜ

    ɹɹɹɹɹɹɹɹɹɹɹ ɹɹ σϑΥϧτ: stringsAndStringsdict


    -l --language ίϯύΠϧ͢ΔಛఆݴޠΛࢦఆ

    ͜ͷΦϓγϣϯ͸ෳ਺ճར༻Մೳ


    --serialization-format ҟͳΔදݱ͕ՄೳͳݸʑͷϑΝΠϧͷग़ྗܗࣜ

    ɹɹɹɹɹɹɹɹɹɹ σϑΥϧτ: text


    --dry-run ίϯύΠϧʹΑΓੜ੒͞ΕΔग़ྗύεͷվߦ۠੾ΓͷϦετΛग़ྗ͢Δ͕

    ࣮ࡍʹ͸Կ΋ίϯύΠϧ͠ͳ͍

    View Slide

  30. compile ͷ࢖༻ྫ
    $./xcstringstool compile ~/Desktop/Localizable.xcstrings

    --
    output-directory ~/Desktop
    ίϚϯυΛ࢖༻͢Δͱ.stringsϑΝΠϧ

    ͕ੜ੒͞ΕΔ
    த਎͸ͳ͔ͥ dictionary ܗࣜʹͳ͍ͬͯΔ

    View Slide

  31. compile ͷ࢖༻ྫ
    $./xcstringstool compile ~/Desktop/Localizable.xcstrings

    --
    output-directory ~/Desktop
    --
    serialization-format binary
    FormatʹbinaryΛࢦఆ͢Δ͜ͱͰbinaryܗࣜͰͷੜ੒͕Ͱ͖Δ
    ipaϑΝΠϧ಺ͷܗࣜͱҰக͢ΔͷͰ

    Xcode͸ύοέʔδ࡞੒࣌ʹ͜ͷίϚϯυΛ

    ୟ͍ͯͦ͏

    View Slide

  32. αϒίϚϯυ sync ʹ͍ͭͯ
    ֓ཁ: .stringsdataϑΝΠϧʹଘࡏ͢Δจࣈྻʹج͖ͮ

    .xcstringsϑΝΠϧΛߋ৽͢Δ
    ࢖͍ํ xcstringstool sync ...

    --stringsdata ...

    --skip-marking-strings-stale
    option
    Ҿ਺ Ϛʔδઌͷ.xcstringsϑΝΠϧ

    View Slide

  33. αϒίϚϯυ sync ʹ͍ͭͯ
    --stringsdata ιʔε͔Β࢖༻͞ΕΔจࣈྻΛࢦఆ͢Δ

    .stringsdataϑΝΠϧ


    --skip-marking-strings-stale .stringsdataʹଘࡏ͠ͳ͍৔߹ʹ

    จࣈྻΛݹ͍΋ͷͱͯ͠ϚʔΫͨ͠Γ

    .xcstrings͔ΒͦΕΒΛ࡟আͨ͠Γ͢ΔͷΛ๷͙
    .stringsdataϑΝΠϧΛ࡞੒Ͱ͖ͣίϚϯυΛࢼͤͳ͔ͬͨ


    ϚΠάϨʔγϣϯΛߦ͏ࡍʹར༻͞ΕΔՄೳੑ͕͋Δ

    View Slide

  34. LT·ͱΊ

    View Slide

  35. ·ͱΊ
    1. Xcode 15 ͔Β͸ଟݴޠରԠΛߦ͏ࡍʹ .xcstrings Λར༻͢Δ͜ͱ͕Ͱ͖Δ


    2. .xcstrings ϑΝΠϧΛར༻ͯ͠΋ .ipa ϑΝΠϧʹ͸

    ͜Ε·Ͱ௨Γ .strings ϑΝΠϧ͕ੜ੒͞ΕΔ


    3. .xcstrings ϑΝΠϧ͔Β .strings ϑΝΠϧ΁ͷม׵͸ Xcode 15 ͔Β௥Ճ͞Εͨ

    xcstringstool ͕ར༻͞Ε͍ͯΔՄೳੑ͕ߴ͍


    1. xcstringstool ͷ compile ίϚϯυΛར༻͠όΠφϦͷੜ੒ΛߦͬͯΔ


    2. option ͱͯ͠ --serialization-format binary ͕ࢦఆ͞Ε͍ͯΔ


    View Slide

  36. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide