import os
import re
import shutil
import subprocess
from argparse import ArgumentParser
# mobileprovision system root
provision_root = os.path.join(os.environ["HOME"], "Library/MobileDevice/Provisioning Profiles")
def get_file_path_list(folder_path, pattern):
output_list = []
for root, _, files in os.walk(folder_path):
for file_name in files:
if file_name.endswith(pattern):
output_list.append(os.path.join(root, file_name))
return output_list
def get_file_name_list(folder_path, pattern):
output_list = []
for root, _, files in os.walk(folder_path):
for file_name in files:
if file_name.endswith(pattern):
output_list.append(file_name)
return output_list
def is_file_exists(file_path):
return os.path.isfile(file_path) or os.path.islink(file_path)
def is_dir_exists(dir_path):
return os.path.isdir(dir_path)
if not is_dir_exists(provision_root):
os.makedirs(provision_root, mode=0o777, exist_ok=True)
def install_mobile_provision(mobile_provision_path):
if not is_file_exists(mobile_provision_path):
print(f"error:mobileprovision not exists:{mobile_provision_path}")
return
print(f">>install mobileprovision from:{mobile_provision_path}")
shellCommod = "grep UUID -A1 -a " + mobile_provision_path + " | grep -io '[-A-Z0-9]\\{36\\}'"
uuid = subprocess.check_output(shellCommod, shell=True).strip().decode("ascii")
# with open(mobile_provision_path, "r", encoding="utf-8", errors="ignore") as file:
# content = file.read()
# uuid = re.search(r"[-A-Z0-9]{36}", content).group()
print(f">>install uuid={uuid}")
shutil.copy(mobile_provision_path, os.path.join(provision_root, f"{uuid}.mobileprovision"))
def get_current_installed_mobile_provisions():
print("===print all mobileprovisions on this machine===")
for file_name in get_file_name_list(provision_root, ".mobileprovision"):
print(f">{file_name}")
def install_all_mp(base_folder):
print("===install *.mobileprovision from P4===")
for file_path in get_file_path_list(base_folder, ".mobileprovision"):
install_mobile_provision(file_path)
get_current_installed_mobile_provisions()
if __name__ == '__main__':
parser = ArgumentParser()
parser.add_argument(
"-path",
"--search-path",
help="mobileprovision search path",
dest="base_folder",
default="",
)
options = parser.parse_args()
install_all_mp(options.base_folder)
执行方式
python InstallMobileprovision.py -path /workspace/Dev/MainClient/BuildiOS/Certificate