o
    Hi                     @   s   d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZmZmZ dd Zdd Zd	d
 Zdd ZdddZedkryeejdk rYed ed ejd Zejd Zeejdkroejd ndZeeee dS dS )u   
修改指定工程名
    N)oc_util)!replace_project_name_in_all_filesreplace_xcode_project_referencereplace_import_statementsreplace_objc_string_literalsreplace_file_contentrandom_one_project_namec                 C   s|   | d}t d|  d|  tj| ddD ]\}}}||v r3tj||}|}t d|  |  S qt d| d d	S )
u.  
    在指定目录中查找指定名称的Xcode项目
    
    参数:
        search_dir (str): 要搜索的目录路径
        project_name (str): 要查找的项目名称（不包含.xcodeproj扩展名）
        
    返回:
        str: 找到的项目路径，如果未找到则返回None
    
.xcodeproju
   开始在 u    中查找项目: Ttopdownu   找到项目: u   未找到名为 
    的项目N)printoswalkpathjoin)
search_dirproject_nameproject_dir_namerootdirs_project_pathproject_parent_dir r   E/data/storage/obfuscation/tool/ObjectiveC/oc_custom/custom_project.pyfind_project_by_name   s   
r   c           	         s   ||d g t j| ddD ]<\}}} fdd|D |dd< |D ]'}t j||}|||d}t j||}t || td| d	|  q!qdS )
u"   
    修改项目目录名称
    r	   Tr
   c                       g | ]}| v r|qS r   r   .0dcontains_dirr   r   
<listcomp>/       z#modify_dir_name.<locals>.<listcomp>N   u   已重命名目录:  -> )r   r   r   r   replacerenamer   )	project_dirold_namenew_namer   r   r   namedir_pathnew_pathr   r!   r   modify_dir_name)   s   r/   c              
      s  d|d |d |d g t j| ddD ]\}}} fdd|D |d	d	< |D ]}t j||}t|d
F}| }	t|	||}	||d ksL||d krtt|	|d |d }	t|	|d |d }	t|	d| d d| d }	t|	||}	W d	   n1 s~w   Y  t|d}||	 W d	   n1 sw   Y  ||v r|	||}
t j||
}t 
|| td| d|  q'qd	S )u"   
    修改项目文件内容
    zproject.pbxprojz	.xcschemez.hz.mTr
   c                    r   r   r   )r   fcontains_filer   r   r#   =   r$   z'modify_file_content.<locals>.<listcomp>NrzVersionNumber;VersionStringzpath =/wu   已重命名文件: r&   )r   r   r   r   openreadr   r   writer'   r(   r   )r)   r*   r+   r   r   filesr,   	file_pathr0   file_contentnew_file_namer.   r   r1   r   modify_file_content7   s4   	r>   c                    s  d}t j| ddD ]\}}} fdd|D |dd< |D ]	}t j||}qq	|s4td  d dS t j|ddD ]D\}}}|D ]<}t j|}	|	d	 d
kr~t j||}
ttj	
 }||	d |}t j||}t |
| td|
 d|  qBq;t j|ddD ]i\}}}|D ]a}|dkrt j||}t|dG}t|}|d }d  }||v rd| }||||< ||d< t|d}t|| W d   n1 sw   Y  td W d   n1 sw   Y  qqdS )u"   
    修改mac登录用户名
     Tr
   c                    s   g | ]
}| d  kr|qS )r	   r   r   old_textr   r   r#   Y   s    z)modify_mac_login_name.<locals>.<listcomp>Nu
   未找到 u   .xcodeproj 目录r%   z.xcuserdatadr   u   已修改用户数据目录: r&   zxcschememanagement.plistrbSchemeUserStatez%s.xcscheme_^#shared#^_wbu5   已更新 xcschememanagement.plist 中的方案引用)r   r   r   r   r   splitextrandomchoicer   list_random_wordslowerr'   r(   r7   plistlibloadpopdump)r)   rA   new_textop_pathr   r   r   r,   r:   
name_tupleold_pathr+   r.   r;   r0   r<   	name_dictold_keynew_keyr   r@   r   modify_mac_login_nameS   sT   

rU   c              
   C   s   t | |}|std| d dS |du rt }td| d|  tj}zJz+|t_t||| t||| t||| t|| td| d|  |W W |t_S  t	yo } ztd|  W Y d}~W |t_dS d}~ww |t_w )u  
    修改指定工程名

    参数:
        search_dir (str): 要搜索的目录路径
        old_name (str): 要修改的项目名称
        new_name (str, optional): 新的项目名称，如果为None则随机生成

    返回:
        str: 操作成功返回新的项目名称，失败返回None

    使用示例:
        new_name = custom_modify_project_name('/path/to/search', 'OldProjectName', 'NewProjectName')
    u   错误: 未找到名为 r   Nu   开始修改项目名称: r&   u   项目名称修改完成: u   修改项目名称时出错: )
r   r   r   r   path_mix_projectr/   r>   rU   r   	Exception)r   r*   r+   r)   original_path_mix_projecter   r   r   custom_modify_project_name|   s0   


rZ   __main__   uM   用法: python custom_project.py <搜索目录> <旧项目名> [新项目名]r%      )N)__doc__r   jsonrF   rerJ   sys
ObjectiveCr    ObjectiveC.oc_function.b_projectr   r   r   r   r   r   r   r/   r>   rU   rZ   __name__lenargvr   exitr   r*   r+   r   r   r   r   <module>   s&    ( 	
):


