Загрузка данных


name: Build TrollStore IPA

on:
  push:
    branches: [ "main", "master" ]
  workflow_dispatch:

jobs:
  build:
    runs-on: macos-14

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Clean & Compile App
        run: |
          rm -rf Dopamine.app Payload Dopamine.ipa
          mkdir -p Dopamine.app
          
          # Компиляция приложений и всех SwiftUI представлений
          swiftc -sdk $(xcrun --sdk iphoneos --show-sdk-path) \
            -target arm64-apple-ios16.2 \
            -emit-executable \
            -o Dopamine.app/Dopamine \
            Sources/Dopamine/App.swift \
            Sources/Dopamine/Models/StickStore.swift \
            Sources/Dopamine/Views/MainTabView.swift \
            Sources/Dopamine/Views/CounterView.swift \
            Sources/Dopamine/Views/CalendarAnalyticsView.swift \
            Sources/Dopamine/Views/HistoryView.swift

      - name: Install Dependencies & Generate Assets
        run: |
          python3 -m pip install Pillow --break-system-packages
          
          # Генерация иконки приложения
          python3 -c "
          from PIL import Image, ImageDraw

          img = Image.new('RGB', (1024, 1024), color='#1C1C1E')
          draw = ImageDraw.Draw(img)

          center = 512
          radius = 320
          draw.ellipse([center - radius, center - radius, center + radius, center + radius], fill='#FF5E00')

          radius_inner = 180
          draw.ellipse([center - radius_inner, center - radius_inner, center + radius_inner, center + radius_inner], fill='#FF9500')

          img.save('Dopamine.app/AppIcon60x60@2x.png')
          img.save('Dopamine.app/AppIcon60x60@3x.png')
          "

          # Генерация гарантированно корректного Info.plist
          python3 -c "
          plist_content = '''<?xml version=\"1.0\" encoding=\"UTF-8\"?>
          <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
          <plist version=\"1.0\">
          <dict>
              <key>CFBundleExecutable</key>
              <string>Dopamine</string>
              <key>CFBundleIdentifier</key>
              <string>com.app.dopamine</string>
              <key>CFBundleName</key>
              <string>Dopamine</string>
              <key>CFBundleDisplayName</key>
              <string>Dopamine</string>
              <key>CFBundlePackageType</key>
              <string>APPL</string>
              <key>CFBundleShortVersionString</key>
              <string>1.0</string>
              <key>CFBundleVersion</key>
              <string>1</string>
              <key>LSRequiresIPhoneOS</key>
              <true/>
              <key>MinimumOSVersion</key>
              <string>16.2</string>
              <key>UILaunchScreen</key>
              <dict/>
              <key>CFBundleIcons</key>
              <dict>
                  <key>CFBundlePrimaryIcon</key>
                  <dict>
                      <key>CFBundleIconFiles</key>
                      <array>
                          <string>AppIcon60x60</string>
                      </array>
                      <key>UIPrerenderedIcon</key>
                      <true/>
                  </dict>
              </dict>
          </dict>
          </plist>
          '''
          with open('Dopamine.app/Info.plist', 'w', encoding='utf-8') as f:
              f.write(plist_content.strip())
          "

          # Конвертация в бинарный plist
          plutil -convert binary1 Dopamine.app/Info.plist

      - name: Ad-hoc Code Sign
        run: |
          codesign -s - --force --deep Dopamine.app

      - name: Package into IPA
        run: |
          mkdir -p Payload
          cp -R Dopamine.app Payload/
          zip -qr Dopamine.ipa Payload/

      - name: Upload IPA Artifact
        uses: actions/upload-artifact@v4
        with:
          name: Dopamine-TrollStore
          path: Dopamine.ipa