import json import os import shutil from BuildEnvironment import is_apple_silicon, call_executable, BuildEnvironment def remove_directory(path): if os.path.isdir(path): shutil.rmtree(path) def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, configuration_path, bazel_app_arguments, target_name): if '/' in target_name: app_target_spec = target_name.split('/')[0] + '/' + target_name.split('/')[1] + ':' + target_name.split('/')[1] app_target = target_name app_target_clean = app_target.replace('/', '_') else: app_target_spec = '{target}:{target}'.format(target=target_name) app_target = target_name app_target_clean = app_target.replace('/', '_') bazel_generate_arguments = [build_environment.bazel_path] bazel_generate_arguments += ['run', '//{}_xcodeproj'.format(app_target_spec)] bazel_generate_arguments += ['--override_repository=build_configuration={}'.format(configuration_path)] if target_name == 'Telegram': if disable_extensions: bazel_generate_arguments += ['--//{}:disableExtensions'.format(app_target)] bazel_generate_arguments += ['--//{}:disableStripping'.format(app_target)] project_bazel_arguments = [] for argument in bazel_app_arguments: project_bazel_arguments.append(argument) project_bazel_arguments += ['--override_repository=build_configuration={}'.format(configuration_path)] if target_name == "Swiftgram/Playground": project_bazel_arguments += ["--swiftcopt=-no-warnings-as-errors", "--copt=-Wno-error"]#, "--swiftcopt=-DSWIFTGRAM_PLAYGROUND", "--copt=-DSWIFTGRAM_PLAYGROUND=1"] if target_name == 'Telegram': if disable_extensions: project_bazel_arguments += ['--//{}:disableExtensions'.format(app_target)] project_bazel_arguments += ['--//{}:disableStripping'.format(app_target)] project_bazel_arguments += ['--features=-swift.debug_prefix_map'] xcodeproj_bazelrc = os.path.join(build_environment.base_path, 'xcodeproj.bazelrc') if os.path.isfile(xcodeproj_bazelrc): os.unlink(xcodeproj_bazelrc) with open(xcodeproj_bazelrc, 'w') as file: for argument in project_bazel_arguments: file.write('build ' + argument + '\n') call_executable(bazel_generate_arguments) if app_target_spec == "Telegram:Telegram": # MARK: Swiftgram app_target_spec = "Telegram/Swiftgram" xcodeproj_path = '{}.xcodeproj'.format(app_target_spec.replace(':', '/')) return xcodeproj_path def generate(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, configuration_path, bazel_app_arguments, target_name) -> str: return generate_xcodeproj(build_environment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, configuration_path, bazel_app_arguments, target_name)