import os import shutil SOURCE_DIR = "/Users/hamzaaleghwairyeen/development/App" TARGET_DIR = "/Users/hamzaaleghwairyeen/development/App/Siro" mappings = [ { "src": "Intaleq", "dst": "siro_rider", "old_app_id": "com.Intaleq.intaleq", "new_app_id": "com.siro.siro_rider", "extra_folders": ["packages"] }, { "src": "intaleq_driver", "dst": "siro_driver", "old_app_id": "com.intaleq_driver", "new_app_id": "com.siro.siro_driver", "extra_folders": ["bubble-master", "trip_overlay_plugin"] }, { "src": "intaleq_admin", "dst": "siro_admin", "old_app_id": "com.intaleq.intaleq_admin", "new_app_id": "com.siro.siro_admin", "extra_folders": [] }, { "src": "service_intaleq", "dst": "siro_service", "old_app_id": "com.service_intaleq", "new_app_id": "com.siro.siro_service", "extra_folders": [] } ] def replace_in_file(filepath, old_str, new_str): try: with open(filepath, 'r', encoding='utf-8') as f: content = f.read() if old_str in content: content = content.replace(old_str, new_str) with open(filepath, 'w', encoding='utf-8') as f: f.write(content) except Exception as e: pass def process(): for m in mappings: src_app = os.path.join(SOURCE_DIR, m['src']) dst_app = os.path.join(TARGET_DIR, m['dst']) print(f"Processing native folders for {m['dst']}...") # 1. Copy native folders native_folders = ['android', 'ios', 'macos', 'web'] for folder in native_folders: s_folder = os.path.join(src_app, folder) d_folder = os.path.join(dst_app, folder) if os.path.exists(s_folder): if os.path.exists(d_folder): shutil.rmtree(d_folder) shutil.copytree(s_folder, d_folder, symlinks=True, ignore=shutil.ignore_patterns('.symlinks', 'Pods', 'build', '.dart_tool')) # 2. Copy extra internal packages for folder in m['extra_folders']: s_folder = os.path.join(src_app, folder) d_folder = os.path.join(dst_app, folder) if os.path.exists(s_folder): if os.path.exists(d_folder): shutil.rmtree(d_folder) shutil.copytree(s_folder, d_folder, symlinks=True, ignore=shutil.ignore_patterns('build', '.dart_tool')) # 3. Android Package Renaming old_app_id = m['old_app_id'] new_app_id = m['new_app_id'] android_dir = os.path.join(dst_app, 'android') if os.path.exists(android_dir): # Replace string occurrences in Android files for root, dirs, files in os.walk(android_dir): for file in files: if file.endswith(('.kt', '.java', '.xml', '.gradle', '.gradle.kts', '.pro')): replace_in_file(os.path.join(root, file), old_app_id, new_app_id) # Move kotlin/java directory structure for lang in ['kotlin', 'java']: for source_type in ['main', 'debug', 'profile']: src_dir = os.path.join(android_dir, 'app', 'src', source_type, lang) if os.path.exists(src_dir): old_path = os.path.join(src_dir, *old_app_id.split('.')) new_path = os.path.join(src_dir, *new_app_id.split('.')) if os.path.exists(old_path) and old_path != new_path: os.makedirs(new_path, exist_ok=True) for item in os.listdir(old_path): shutil.move(os.path.join(old_path, item), new_path) # Clean up old empty directories curr = old_path while curr != src_dir: if not os.listdir(curr): os.rmdir(curr) curr = os.path.dirname(curr) # 4. iOS Bundle ID Renaming ios_dir = os.path.join(dst_app, 'ios') if os.path.exists(ios_dir): for root, dirs, files in os.walk(ios_dir): for file in files: if file.endswith(('.pbxproj', '.plist', '.m', '.h', '.swift', '.storyboard', '.xcconfig')): replace_in_file(os.path.join(root, file), old_app_id, new_app_id) print("Done copying and modifying native folders.") if __name__ == "__main__": process()