o
    Hif1                     @   s   d 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 ddlm	Z	 dd Z
dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdS )u   
通用方法
    N)oc_util)oc_yaml)XcodeProjectc                   C   s
   t  ad S N)get_ignore_log_managerignore_log_manager r   r   4/data/storage/obfuscation/tool/ObjectiveC/oc_tool.pyinit	   s   
r
   c                   C   s   t tjd d dS )Nu   /被忽略的关键词日志z.txtza+)openr   path_mixr   r   r   r	   r      s   r   c                 C   s  | dkrdg}t |}t||S | dkr"dg}t |}t||S | dkr3dg}t |}t||S | dkrEdd	g}t |}t||S | d
krWg d}t |}t||S | dkrig d}t |}t||S | dkr{g d}t |}t||S | dkrg d}t |}t||S | dkrg d}t |}t||S | dkrg d}t |}t||S | dkrg d}t |}t||S | dkrg d}t |}t||S | dkr| dk rd}g d}tdD ]	}|t | }qt||S | dkr| dk rd}g d}tdD ]
}|t | }q
t||S | dkr>| dk r>d}g d}td
D ]
}|t | }q.t||S | dkrb| d k rbd}g d}tdD ]
}|t | }qRt||S d}g d}tddD ]
}|t | }qmt||S )!ub    根据长度随机一个字符串
 isFirst=True,表示第一个首字母大写,False表示小写
   3   4   5   633   )73443   )8533544	   )963365445
   )7337466455433343334   )833847745665335353533443434344   )93398448755766336363633345354543534435453   )9449855867764454545443555355533373733433433333433334   )95596886774555455544464646443344343434434433434343343335335335335333       )r   r   r   r   r   r   r       (   2   )randomchoiceget_unique_stringrange)numisFirstnum_list
num_stringaList_r   r   r	   random_one_string   s   




























r   c                 C   s   d}|}| D ]f}|dkr|t    }nM|dkr"|t    }n@|dkr/|t    }n3|dkr<|t    }n&|dkrI|t    }n|dkrV|t    }n|dkrb|t    }|d	krl|	 }d
}q|S )Nrw   r   r   r   r   r   r   r    FT)
r   three
capitalizefourfivesixseveneightninelower)r   r   nameisOner   r   r   r	   r}   a   s,   r}   c                 C   s   t d| rdS dS )u8    字符串是否由数字字母合下划线组合而成 z^[A-Za-z0-9_]*$TF)rematch)stringr   r   r	   isHasLetterNumXiax   s   r   c                 C   s>  t |dks
| rdS t|dkrdS |tjv rdS |tjv r(tj| dS |tjv r>t	
d| |f  tj| dS |tjv rTt	
d| |f  tj| dS |tjjv rkt	
d| |f  tj| dS |tjv r|tjvrt	
d| |f  tj| dS |tjjv rt	
d| |f  tj| dS dS )	u9    关键词是否允许被混淆 False不允许 True允许r   Fu%   %s-系统framework包含关键词:%s
u%   %s-工程framework包含关键词:%s
u%   %s-总文件名列表含关键词:%s
u   %s-字符串含关键词:%s
u   %s-总表中含关键词:%s
T)lenisspacer   r   list_ignore_keywordr   #list_user_custom_keyword_not_changeappendlist_system_framework_wordr   writelist_project_framework_wordclass_oc_fileall_file_name_listlist_string_wordslist_user_arrow_change_keywordtotal_words)descripeold_namer   r   r	   is_word_can_mix~   s<   



r   c                 C   s   t | dks
|  rdS t| dkrdS | tjjv rdS | tjv r#dS | tjv r*dS | tjjv r2dS | tj	v r>| tj
vr>dS | tjjv rFdS | tjv rMdS | tjv rTdS dS )u#    混淆前后关键词是否合法 r   FT)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )new_namer   r   r	   is_name_legal   s*   



r   c                 C   sD   dt jt jf }t|}||d }|j| |d || dS )uu    
    创建group for xcodeproj

    g_name: group名

    g_parent: group在哪个group的下面,父类group名
    %s/%s.xcodeproj/project.pbxprojr   )r   parentN)r   path_mix_projectname_current_projectr   loadget_groups_by_name	add_groupsave)g_nameg_parent	proj_path
hs_projectp_parentr   r   r	   r      s
   
r   c                 C   sF   dt jt jf }t|}|| d }|j||dd || dS )un    
    添加文件到group 
    param: f_parent: 存放文件夹名
    param: f_path: 文件存放路径
    r   r   F)pathr   forceN)r   r   r   r   r   r   add_filer   )f_parentf_pathr   r   r   r   r   r	   r      s
   
r   c           	   
   C   s  t j|dkst j|dkr)ddl}t|dr td| td}t| |S ddl}t|dr@t j	d}t
d|  nt jt}t jt j|}t
d	|  t j|d
}t
d|  zt j|swt j|dd t
d W n ty } zt
d|   d}~ww t j|| }t
d|  zt j|st j|dd t
d W n ty } zt
d|   d}~ww t j|d}t
d|  ztj||tdddddd t
d W |S  ty } zt
d|   d}~ww )u"   
    获取当前混淆目录
    Fr   N_MEIPASSu    输入路径无效或不存在: u-   
输入路径有误,请确认后重新输入:~u#   打包环境，使用用户目录: u#   开发环境，使用项目目录: u   混淆完成后的文件u   混淆基础目录: T)exist_oku   创建混淆基础目录成功u    创建混淆基础目录失败: u   日期目录路径: u   创建日期目录成功u   创建日期目录失败: u   混淆后工程u   正在复制工程到: z.gitz.git*Podsbuildz.vscode)ignoreu   工程复制完成u   复制工程失败: )osr   existsisdirsyshasattr
ValueErrorinputget_current_mix_path
expanduserprintabspath__file__dirnamejoinmakedirs	Exceptionshutilcopytreeignore_patterns)	date_dir
input_pathr   	base_pathcurrent_filemix_base_diredate_dir_pathnew_pathr   r   r	   r      s`    



r   c                 C   s   | r| S d}t j}td|  g }tj|ddD ]/\}}}|D ]'}|drG|| tj|d }|t	j
vrG|}td| d|   nq q|sk|rVtd	|  |S td
| d tj|}td|  |S )u    
    获取当前工程名 
    参数:
        name: 可选，指定工程名称，如果提供则直接返回
    返回:
        工程名称
    rw   u#   正在搜索项目文件，路径: T)topdownz
.xcodeprojr   u   找到项目文件: u   , 项目名称: u:   警告: 找到的所有项目文件都在过滤列表中: u   错误: 在路径 u(    中没有找到任何 .xcodeproj 文件u    使用目录名作为项目名: )r   r   r   r   walkendswithr   r   splitextr   list_filter_projectbasename)r   p_namer   xcodeproj_filesr   dirsdir_nameproject_namer   r   r	   get_current_project_name!  s0   


r   r   )__doc__r{   r   r   r   
ObjectiveCr   r   pbxprojr   r
   r   r   r}   r   r   r   r   r   r   r   r   r   r   r	   <module>   s      R'!>