Development

[MacOS] Sparkle ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์‚ฌ์šฉ๋ฒ•

JayKim๐Ÿ™‚ 2023. 8. 18. 18:43

Sparkle ์€ MacOS ์šฉ ์†Œํ”„ํŠธ์›จ์–ด ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„ ์›Œํฌ์ด๋‹ค.
ํ•ด๋‹น ๊ด€๋ จ ํŒŒ์ผ์€ ์•„๋ž˜ ์‚ฌ์ดํŠธ์—์„œ ์ •๋ณด๋ฐ ๊ด€๋ จ ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
https://sparkle-project.org

์ฐธ๊ณ ๋กœ Sparkle ์€ ์œˆ๋„์šฐ ์šฉ๋„ ์žˆ๋‹ค.
https://winsparkle.org/

๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ OS ํ™˜๊ฒฝ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์–ด์„œ ์‚ฌ์šฉ๋ฒ•์—์„œ๋Š” ์กฐ๊ธˆ ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ์„ค๋ช…์€ MacOS๋ฅผ ๊ธฐ์ค€์ด๋‹ค.

๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ์„ ๋‹ค์šดํ›„
Sparkle.framework ํด๋” ์ „์ฒด๋ฅผ ๋Š” QT ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ lib ํด๋”์— ๋ณต์‚ฌ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ Sparkle ์—์„œ๋Š” DSA ์„œ๋ช…์—์„œ EdDSA ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ณ€๊ฒฝ ๋˜์—ˆ๋‹ค.
EdDSA ํ‚ค ์ƒ์„ฑ์€ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋Š”๋ฐ ๊ฐœ์ธํ‚ค๋Š” MacOS ์˜ KeyChain ์œผ๋กœ ๋“ค์–ด ๊ฐ„๋‹ค.

EdDSA ํ‚ค ์ƒ์„ฑ

./bin/generate_keys

๊ฒฐ๊ณผ ์˜ˆ์ œ

<key>SUPublicEDKey</key>  
<string>pfIShU4dEXqPd5ObYNfDBiQWcXozk7estwzTnF9BamQ=</string>

ํ•œ๋ฒˆ ์ƒ์„ฑ์„ ํ•˜๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ์‹คํ–‰์„ ํ•ด๋„ ๊ณ„์† ๊ฐ™์€ ๊ณต๊ฐœํ‚ค ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.
์•„๋งˆ๋„ ์ฒ˜์Œ์—๋Š” ์ƒˆ๋กœ ํ‚ค ์Œ์„ ์ƒ์„ฑํ•˜์ง€๋งŒ ํ•œ๋ฒˆ ์ƒ์„ฑ ๋˜๋ฉด ํ‚ค์— ๋Œ€ํ•œ ๊ณต๊ฐœํ‚ค ์ •๋ณด๋งŒ ํ‘œ์‹œํ•˜๋Š”๊ฑธ๋กœ ๋ณด์ธ๋‹ค.

์ด ๊ณต๊ฐœํ‚ค ๊ฐ’์€ ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ info.plist ํŒŒ์ผ์— ์ถ”๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  info.plist ์ •๋ณด์—๋Š”
SUFeedURL ์ •๋ณด์™€ CFBundleVersion ์ •๋ณด๊ฐ€ ์ถ”๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

info.plist ์˜ˆ์ œ

    <key>CFBundleVersion</key>
        <string>1.4.7</string>
    <key>CFBundleSignature</key>
        <string>hbwr</string>
        <key>SUFeedURL</key>
        <string>https://jykim74.github.io/appcast/bereditor_appcast_mac.xml</string>
        <key>SUPublicEDKey</key>
        <string>TLJn+zNF8t6SpCGDfDjjKEJGnv40yVGKJrK1XBhyVKo=</string>

EdDSA ์„œ๋ช…

./bin/sign_update path_to_your_update.(zip|dmg|tar.*)

์—ฌ๊ธฐ์„œ path_to_you_update.(zip|dmg|tar) ๋“ฑ ์„œ๋ช… ๋Œ€์ƒ ํŒŒ์ผ์„ ์ ์šฉ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด ๋ช…๋ น ์‹คํ–‰ ๊ฒฐ๊ณผ ๊ฐ’์„ appcast.xml ํŒŒ์ผ์— ์ถ”๊ฐ€ ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

appcast.xml ์ ์šฉ ์˜ˆ์ œ

    <enclosure url="[https://example.com/downloads/app.zip.or.dmg.or.tar.etc](https://example.com/downloads/app.zip.or.dmg.or.tar.etc)"  
                sparkle:edSignature="7cLALFUHSwvEJWSkV8aMreoBe4fhRa4FncC5NoThKxwThL6FDR7hTiPJh1fo2uagnPogisnQsgFgq6mGkt2RBw=="  
                length="1623481"  
                type="application/octet-stream" />

์•„๋ž˜๋Š” ์ถ”๊ฐ€ ์ฝ”๋“œ ์„œ๋ช… ๊ด€๋ จ ๋ช…๋ น์–ด์ด๋‹ค.

App ์„œ๋ช…

codesign --force --deep --sign - /Applications/BerEditor.app

ํ˜น์‹œ๋‚˜ GateKeeper ๋ฅผ ๋„๊ธฐ / ์ผœ๊ธฐ๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ฐธ์กฐ ํ•œ๋‹ค.

GateKeeper ๋„๊ธฐ

sudo spctl --master-disable

GateKeeper ์ผœ๊ธฐ

sudo spctl --master-enable

ํ˜„์žฌ ๊นŒ์ง€๋Š” ์—…๋ฐ์ดํŠธ ๋„์ค‘ SIG ABORT ๋ฐœ์ƒ ํ•จ
์ฝ”๋“œ ์‚ฌ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š”๋ฐ
์ถ”ํ›„ AppleID ๋กœ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ํ›„ ์ฝ”๋“œ ์„œ๋ช… ํ›„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Œ
์ฝ”๋“œ ์„œ๋ช…์ด ์•ˆ๋˜์–ด์„œ ์ฃฝ๋Š”๊ฒŒ ๋งž๋Š”์ง€ ์•„๋‹˜ ๋‚ด๊ฐ€ ์ž˜๋ชป ์‚ฌ์šฉํ•œ๋Š” ๊ฑด์ง€ ์•„์ง ์ •ํ™•ํ•˜์ง€๊ฐ€ ์•Š๋„ค์š”..

ํ˜น์‹œ Apple ID ์—†์ด๋„ ํ…Œ์ŠคํŠธ ํ•ด ๋ณผ์ˆ˜ ์žˆ๋Š”์ง€ ์•„์‹œ๋Š”๋ถ„ ์ข€ ์•Œ๋ ค์ฃผ์„ธ์š”..

๋ฐ˜์‘ํ˜•