ipa / app.py
sudo-soldier's picture
Update app.py
d9992d2 verified
Raw
History Blame Contribute Delete
2.89 kB
from fastapi import FastAPI, UploadFile, File, HTTPException
from fastapi.responses import JSONResponse
from pydantic import BaseModel
import os
import subprocess
import tempfile
import shutil
# Initialize FastAPI app
app = FastAPI()
# Model for incoming data
class AppInfo(BaseModel):
app_name: str
bundle_id: str
website_url: str
version: str
build_number: str
fullscreen: bool
orientation: str
status_bar_style: str
hide_status_bar: bool
@app.post("/generate-ipa/")
async def generate_ipa(app_info: AppInfo, icon: UploadFile = File(...)):
try:
# Use a temporary directory for storing the icon and IPA files
with tempfile.TemporaryDirectory() as temp_dir:
# Save the uploaded icon to the temporary directory
icon_filename = os.path.join(temp_dir, f"{app_info.app_name}_icon.png")
with open(icon_filename, "wb") as icon_file:
icon_file.write(await icon.read())
# Prepare the Fastlane command to create the IPA
fastlane_command = [
"fastlane", "your_lane", # Replace 'your_lane' with your Fastlane lane
"app_name=" + app_info.app_name,
"bundle_id=" + app_info.bundle_id,
"website_url=" + app_info.website_url,
"version=" + app_info.version,
"build_number=" + app_info.build_number,
"fullscreen=" + str(app_info.fullscreen),
"orientation=" + app_info.orientation,
"status_bar_style=" + app_info.status_bar_style,
"hide_status_bar=" + str(app_info.hide_status_bar),
"icon_path=" + icon_filename # Pass the icon path to Fastlane
]
# Run the Fastlane command to generate the IPA
result = subprocess.run(fastlane_command, capture_output=True, text=True)
if result.returncode != 0:
raise HTTPException(status_code=500, detail=f"Fastlane error: {result.stderr}")
# Assuming Fastlane generates the IPA in the temp directory or specified builds folder
ipa_filename = os.path.join(temp_dir, f"{app_info.app_name}.ipa")
# Return success message and the path to the generated IPA
return JSONResponse(content={
"message": "IPA generated successfully.",
"ipa_file": ipa_filename
}, status_code=200)
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error occurred: {str(e)}")
# Root route to check if the server is running
@app.get("/")
def read_root():
return {"message": "Welcome to the Web IPA Creator Backend!"}
# Run the server directly if the script is executed
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)