o
    Hëi®*  ã                   @   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mZ dd„ Zdd„ Z	dd	„ Z
d
d„ Zddd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )u   
ä¿®æ”¹å·¥ç¨‹å
é    N)Úoc_utilc                 C   sn  g d¢}t jtjddD ]”\}}}|D ]Œ}t j |¡d }||v rŸt j ||¡}zZt|ddd}	|	 ¡ }
W d  ƒ n1 s?w   Y  | |
v rt	|
| |ƒ}
t
|
| |ƒ}
t|
| |ƒ}
| d	¡ret|
| |ƒ}
t|d
dd}	|	 |
¡ W d  ƒ n1 s|w   Y  W q tyž } ztd|› d|› ƒ W Y d}~qd}~ww qqt j tj¡}t j|ddD ]\}}}|D ]y}| d	¡r/t j ||¡}zLt|ddd}	|	 ¡ }
W d  ƒ n1 sÜw   Y  | |
v rt|
| |ƒ}
t|d
dd}	|	 |
¡ W d  ƒ n	1 sw   Y  td|› ƒ W q¶ ty. } ztd|› d|› ƒ W Y d}~q¶d}~ww q¶q¯tdƒ dS )u4   
    åœ¨æ‰€æœ‰æºä»£ç æ–‡ä»¶ä¸­æ›¿æ¢å·¥ç¨‹å
    )	ú.hú.mz.mmz.cz.cppz.swiftú.xcworkspacedataz.pbxprojz.mdT©Útopdowné   Úrzutf-8)ÚencodingNr   Úwu   å¤„ç†æ–‡ä»¶ u    æ—¶å‡ºé”™: u   å·²æ›´æ–°å·¥ä½œç©ºé—´å¼•ç”¨: u   å¤„ç†å·¥ä½œç©ºé—´æ–‡ä»¶ u'   æ‰€æœ‰æ–‡ä»¶ä¸­çš„å·¥ç¨‹åæ›¿æ¢å®Œæˆ)ÚosÚwalkr   Úpath_mix_projectÚpathÚsplitextÚjoinÚopenÚreadÚreplace_objc_string_literalsÚreplace_xcode_project_referenceÚreplace_import_statementsÚendswithÚreplace_workspace_referencesÚwriteÚ	ExceptionÚprintÚdirname)Úold_nameÚnew_nameÚsource_extensionsÚrootÚ_ÚfilesÚnameÚextÚ	file_pathÚfÚfile_contentÚeÚ
parent_dir© r*   úB/data/storage/obfuscation/tool/ObjectiveC/oc_function/b_project.pyÚ!replace_project_name_in_all_files   sb   
ÿ
ÿ€ €ÿêþ
ÿ
ÿ€ €ÿôÿr,   c                 C   ó\   dt  |¡ d }d| d }t  ||| ¡} dt  |¡ d }d| d }t  ||| ¡} | S )u5   
    æ›¿æ¢ xcworkspace æ–‡ä»¶ä¸­çš„é¡¹ç›®å¼•ç”¨
    z(location\s*=\s*"[^"]*/)z(\.xcodeproj")ú\1ú\2z(location\s*=\s*"[^/]*:)©ÚreÚescapeÚsub©r'   r   r   ÚpatternÚreplacementr*   r*   r+   r   ?   s   r   c                 C   r-   )u  
    æ›¿æ¢ Xcode é¡¹ç›®å¼•ç”¨è·¯å¾„
    ä¾‹å¦‚ï¼š
    - location = "group:XXGPlayKit.xcodeproj"> -> location = "group:NewName.xcodeproj">
    - location = "group:XXGThirdMiddlewares/old.xcodeproj"> -> location = "group:XXGThirdMiddlewares/new.xcodeproj">
    z(location\s*=\s*"group:)z(\.xcodeproj">)r.   r/   z(location\s*=\s*"group:[^"]*/)r0   r4   r*   r*   r+   r   O   s   r   c                 C   sr   dt  |¡ d t  |¡ d }d| d | d }t  ||| ¡} dt  |¡ d }d| d }t  ||| ¡} | S )u:   
    æ›¿æ¢å¤´æ–‡ä»¶å¯¼å…¥è¯­å¥ï¼Œå¤„ç†å„ç§æƒ…å†µ
    z(#import\s*<|<)(z)(/)([^/>]*)(z)(\.h>)r.   z\3\4z\6z)(/)([^>]*>)r0   r4   r*   r*   r+   r   b   s    r   c                 C   sJ   t j}| d kr
tƒ n| }t||ƒ |t _t||ƒ t||ƒ t||ƒ d S ©N)r   Úname_current_projectÚrandom_one_project_nameÚmodify_dir_nameÚmodify_file_contentÚmodify_mac_login_namer,   )Ú
u_new_namer   r   r*   r*   r+   Úmodify_project_namer   s   


r>   c                    sŒ   | | d | d g‰ t jtjddD ]2\}}}‡ fdd„|D ƒ|d d …< |D ]}t j ||¡}| | |d¡}t j ||¡}t  ||¡ q%qd S )Nú
.xcodeprojz.bundleTr   c                    ó   g | ]}|ˆ v r|‘qS r*   r*   ©Ú.0Úd©Úcontains_dirr*   r+   Ú
<listcomp>   ó    z#modify_dir_name.<locals>.<listcomp>r   )r   r   r   r   r   r   ÚreplaceÚrename)r   r   r    Údirsr!   r#   Údir_pathÚnew_pathr*   rD   r+   r:   |   s   üþr:   c                 C   s,   dt  |¡ d }d| d }t  ||| ¡S )ud   
    æ›¿æ¢ Objective-C å­—ç¬¦ä¸²å¸¸é‡ä¸­çš„å·¥ç¨‹å
    ä¾‹å¦‚ï¼š@"XXGPlayKit" -> @"NewName"
    z@"ú"r0   r4   r*   r*   r+   r   …   s   r   c           
   
      sj  d| d | d | d g‰ t jtjddD ]ž\}}}‡ fdd„|D ƒ|d d …< |D ]‰}t j ||¡}t|d	ƒF}| ¡ }t|| |ƒ}|| d ksM|| d krut|| d
 |d
 ƒ}t|| d |d ƒ}t|d|  d d| d ƒ}t	|| |ƒ}W d   ƒ n1 sw   Y  t|dƒ}| 
|¡ W d   ƒ n1 s™w   Y  | | |¡}t j ||¡}	t  ||	¡ q(qd S )Nzproject.pbxprojz	.xcschemer   r   Tr   c                    r@   r*   r*   )rB   r&   ©Úcontains_filer*   r+   rF   ‘   rG   z'modify_file_content.<locals>.<listcomp>r	   zVersionNumber;ÚVersionStringzpath =ú/r   )r   r   r   r   r   r   r   r   Úreplace_file_contentr   r   rH   rI   )
r   r   r    r!   r"   r#   r%   r&   r'   rL   r*   rN   r+   r;   Ž   s.   €÷
ÿðþr;   c              
   C   s¨  d}t jtjddD ]\}}}dd„ |D ƒ|dd…< |D ]	}t j ||¡}qq
t j|ddD ]:\}}}|D ]2}t j |¡}|d dkrgt j ||¡}	t tj	¡ 
¡ }
| |d	 |
¡}t j ||¡}t  |	|¡ q5q.t j|ddD ]a\}}}|D ]Y}|d
krÐt j ||¡}t|dƒ$}t |¡}|d }d|  }d| }| |¡||< ||d< W d  ƒ n1 s°w   Y  t|dƒ}t ||¡ W d  ƒ n1 sËw   Y  qwqpdS )u    ä¿®æ”¹macç™»å½•ç”¨æˆ·å Ú Tr   c                 S   s   g | ]}|t jd  kr|‘qS )r?   )r   r8   rA   r*   r*   r+   rF   §   s    z)modify_mac_login_name.<locals>.<listcomp>Nr   z.xcuserdatadr   zxcschememanagement.plistÚrbÚSchemeUserStatez%s.xcscheme_^#shared#^_Úwb)r   r   r   r   r   r   r   ÚrandomÚchoiceÚlist_random_wordsÚlowerrH   rI   r   ÚplistlibÚloadÚpopÚdump)Úold_textÚnew_textÚop_pathr    rJ   r!   r#   r"   Ú
name_tupleÚold_pathr   rL   r%   r&   r'   Ú	name_dictÚold_keyÚnew_keyr*   r*   r+   r<   £   sF   ÿ€ù

úÿ€öÿr<   c                 C   s.  t  d| t j¡}| | ¡}| }|D ]}| ||¡}| ||¡}q| |¡rT|t|ƒ  d¡ ¡ dkrT|t|ƒ  	¡ dkrT|d t|ƒd … }| ||¡}	| ||	d¡}| 
|¡r•|dt|ƒ   d¡ ¡ dkr•|dt|ƒ   	¡ dkr•|t|ƒt|ƒ d d … }| ||¡}	t  d| ¡}
|
 |	|¡}|S )Nz[^a-zA-Z0-9_]%s[^a-zA-Z0-9_]zUTF-8Fr   éÿÿÿÿz%s$)r1   ÚcompileÚSÚfindallrH   Ú
startswithÚlenÚencodeÚisalphaÚisdigitr   r3   )r'   r_   r`   Úp1Úa_listÚnew_file_contentÚaÚnewAr#   ÚnewNameÚcompile_regexr*   r*   r+   rR   Á   s$   

.
6rR   c                  C   sF   d} t t dd¡ƒD ]}| t tj¡ ¡  } | t tj¡ ¡  } q
| S )u    éšæœºä¸€ä¸ªå·¥ç¨‹å rS   r   )ÚrangerW   ÚrandintrX   r   rY   Ú
capitalize)r#   r!   r*   r*   r+   r9   Ö   s
   r9   r7   )Ú__doc__r   ÚjsonrW   r1   r[   Ú
ObjectiveCr   r,   r   r   r   r>   r:   r   r;   r<   rR   r9   r*   r*   r*   r+   Ú<module>   s    (8

		