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 없이도 ν…ŒμŠ€νŠΈ ν•΄ 볼수 μžˆλŠ”μ§€ μ•„μ‹œλŠ”λΆ„ μ’€ μ•Œλ €μ£Όμ„Έμš”..