Публікація десктопних програм в Mac App Store
Mac App Store має більш суворі вимоги, ніж пряме розповсюдження: програма повинна працювати в App Sandbox, використовувати лише дозволені entitlements та пройти ревю Apple. Electron-програми підтримуються, але потребують спеціальної конфігурації.
Відмінність MAS від прямого розповсюдження
| Параметр | Mac App Store | Пряме розповсюдження |
|---|---|---|
| Підпис | Mac App Distribution Certificate | Developer ID Certificate |
| Sandbox | Обов'язковий | Опціональний |
| Нотаризація | Не потрібна (ревю Apple) | Обов'язкова |
| Автооновлення | Механізм App Store | Squirrel/Sparkle |
| Обмеження API | Суворіші | Менше |
Налаштування electron-builder для MAS
# electron-builder.yml
mac:
target:
- target: mas # Mac App Store
- target: mas-dev # Для тестування sandbox
provisioningProfile: build/embedded.provisionprofile
entitlements: build/entitlements.mas.plist
entitlementsInherit: build/entitlements.mas.inherit.plist
hardenedRuntime: false # MAS не вимагає hardened runtime
identity: "3rd Party Mac Developer Application: Company (TEAM_ID)"
Entitlements для MAS
<!-- build/entitlements.mas.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<!-- App Sandbox — обов'язковий для MAS -->
<key>com.apple.security.app-sandbox</key><true/>
<!-- Мережа -->
<key>com.apple.security.network.client</key><true/>
<!-- Якщо потрібен доступ до файлів -->
<key>com.apple.security.files.user-selected.read-write</key><true/>
<!-- Для Electron: JIT потребує окремого entitlement child -->
</dict>
</plist>
<!-- build/entitlements.mas.inherit.plist — для дочірніх процесів Electron -->
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key><true/>
<key>com.apple.security.inherit</key><true/>
</dict>
</plist>
Provisioning Profile
Потрібен Mac App Store Distribution Profile:
- Перейти на developer.apple.com → Certificates, Identifiers & Profiles
- Створити App ID з необхідними можливостями
- Створити Distribution Certificate (3rd Party Mac Developer)
- Створити Provisioning Profile типу Mac App Store
- Завантажити
.provisionprofileта розмістити уbuild/
Побудова та валідація
# Побудова MAS-пакета
npx electron-builder --mac mas
# Валідація перед отриманням
xcrun altool --validate-app \
--file dist/mas/AppName.pkg \
--type osx \
--apiKey "YOUR_API_KEY" \
--apiIssuer "YOUR_ISSUER_UUID"
# Отримання в App Store Connect
xcrun altool --upload-app \
--file dist/mas/AppName.pkg \
--type osx \
--apiKey "YOUR_API_KEY" \
--apiIssuer "YOUR_ISSUER_UUID"
Сучасна альтернатива — xcrun notarytool та Transporter.app.
Обмеження App Sandbox
Sandbox забороняє операції, до яких звикли Electron-розробники:
-
Немає прямого запуску shell-команд через
child_process.exec - Немає доступу до довільних шляхів файлової системи
- Немає автозапуску при старті системи (без LaunchAgent entitlement)
- Міжпроцесна комунікація — лише через XPC або App Groups
Для обходу частини обмежень використовують XPC Services — окремі процеси з розширеними правами, які викликаються з основної програми.
GitHub Actions
- name: Build MAS
run: npx electron-builder --mac mas
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
CSC_LINK: ${{ secrets.MAS_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.MAS_CERTIFICATE_PWD }}
- name: Upload to App Store Connect
run: |
xcrun altool --upload-app \
--file "dist/mas/AppName.pkg" \
--type osx \
--apiKey "${{ secrets.ASC_API_KEY }}" \
--apiIssuer "${{ secrets.ASC_ISSUER_ID }}"
Ревю Apple займає від 1 до 7 днів. Оновлення зазвичай проходять швидше, ніж перша публікація.
Тривалість
Налаштування sandbox-сумісності, provisioning profiles та перша публікація в Mac App Store: 4–6 робочих днів.







