tfd 0.1.0

Pure-Rust fork of the tinyfiledialogs C library
Documentation
name: Mobile Build

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build-ios:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: aarch64-apple-ios, x86_64-apple-ios
      
      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@v2
      
      - name: Create iOS simulator linker shim
        run: |
          SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-path)
          echo "#!/bin/sh" > linker_shim.sh
          echo "cc -isysroot $SDK_PATH \"\$@\"" >> linker_shim.sh
          chmod +x linker_shim.sh
          echo "CARGO_TARGET_X86_64_APPLE_IOS_LINKER=$(pwd)/linker_shim.sh" >> $GITHUB_ENV
      
      - name: Build for iOS Simulator
        run: |
          cargo build --release --example test --target x86_64-apple-ios
      
      - name: Package iOS app
        run: |
          mkdir -p ios-app/tinyfiledialogs.app
          cp target/x86_64-apple-ios/release/examples/test ios-app/tinyfiledialogs.app/tinyfiledialogs
          
          cat > ios-app/tinyfiledialogs.app/Info.plist << EOF
          <?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>tinyfiledialogs</string>
            <key>CFBundleIdentifier</key>
            <string>com.example.tinyfiledialogs</string>
            <key>CFBundleName</key>
            <string>TinyFileDialogs</string>
            <key>CFBundleVersion</key>
            <string>1.0</string>
            <key>CFBundleShortVersionString</key>
            <string>1.0</string>
            <key>UIRequiredDeviceCapabilities</key>
            <array>
              <string>x86_64</string>
            </array>
          </dict>
          </plist>
          EOF
      
      - name: Upload iOS artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ios-simulator-app
          path: ios-app/

  build-android:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: armv7-linux-androideabi, aarch64-linux-android, i686-linux-android, x86_64-linux-android
      
      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@v2
      
      - name: Setup Android SDK
        uses: android-actions/setup-android@v2
      
      - name: Install Android NDK
        run: |
          sdkmanager --install "ndk;25.2.9519653"
          echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/25.2.9519653" >> $GITHUB_ENV
      
      - name: Setup cargo-ndk
        run: |
          cargo install cargo-ndk
      
      - name: Create Android Project Structure
        run: |
          mkdir -p android-project/app/src/main/java/com/example/tinyfiledialogs
          mkdir -p android-project/app/src/main/jniLibs/{armeabi-v7a,arm64-v8a,x86,x86_64}
          
          # Create DialogHelper.java
          cat > android-project/app/src/main/java/com/example/tinyfiledialogs/DialogHelper.java << EOF
          package com.example.tinyfiledialogs;
          
          // Copy the full DialogHelper.java content here
          // (Abbreviated for brevity in this workflow file)
          public class DialogHelper {
              // Implementation methods
          }
          EOF
      
      - name: Build for Android
        run: |
          # Build for all target architectures
          cargo ndk -t armeabi-v7a -t arm64-v8a -t x86 -t x86_64 -o android-project/app/src/main/jniLibs build --release --example test
      
      - name: Create Android APK structure
        run: |
          mkdir -p android-project/app/src/main/res/layout
          mkdir -p android-project/app/src/main/res/values
          
          # Create basic AndroidManifest.xml
          cat > android-project/app/src/main/AndroidManifest.xml << EOF
          <?xml version="1.0" encoding="utf-8"?>
          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.tinyfiledialogs">
          
              <application
                  android:allowBackup="true"
                  android:label="TinyFileDialogs"
                  android:supportsRtl="true">
                  <activity
                      android:name=".MainActivity"
                      android:exported="true">
                      <intent-filter>
                          <action android:name="android.intent.action.MAIN" />
                          <category android:name="android.intent.category.LAUNCHER" />
                      </intent-filter>
                  </activity>
              </application>
          
          </manifest>
          EOF
          
          # Create MainActivity.java
          cat > android-project/app/src/main/java/com/example/tinyfiledialogs/MainActivity.java << EOF
          package com.example.tinyfiledialogs;
          
          import android.app.Activity;
          import android.os.Bundle;
          
          public class MainActivity extends Activity {
              static {
                  System.loadLibrary("test");
              }
              
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  // Initialize DialogHelper
                  DialogHelper.createNotificationChannel(this);
              }
              
              // Native methods would be defined here
              public native void runTest();
          }
          EOF
      
      - name: Upload Android artifacts
        uses: actions/upload-artifact@v4
        with:
          name: android-project
          path: android-project/