Mac环境下加载动态库，签名拦截导致未生效
=====================

**问题现象**

Mac环境下，在DevEco项目开发时，build-profile.json中添加了如下的插桩配置，但是插桩功能未生效。

"transformLib": "<相对模块根路径的动态库路径，以./开头>"

**判断与验证**

1.  进入sdk中es2abc所在目录：\[DevEco-Studio安装目录\]/Contents/sdk/default/openharmony/ets/build-tools/ets-loader/bin/ark/build-mac/bin。
2.  执行下列命令：
    
    ./es2abc --merge-abc --transform-lib <动态库路径> <测试js文件路径>
    
3.  如果提示如下报错信息，原因可能是 es2abc 和动态库文件不属于同一签名组。
    
    os::library\_loader::Load error: dlopen(..., 0x0001): 
    tried: '...' (code signature in <...> '...' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.)
    
4.  用下面命令查看es2abc和动态库文件的签名组信息，如果两个文件，一个有签名信息，一个没有签名信息，或者都有签名信息，但是签名信息中属性'TeamIdentifier'的值是不一样的，那就说明问题是签名组不一致导致的，可以使用"解决方案"提供的方式处理。
    
    codesign -dv --verbose=1 <es2abc路径>
    codesign -dv --verbose=1 <动态库路径>
    

**解决方案**

执行下列命令，将es2abc文件的签名替换成和动态库文件一样的用户签名。

codesign --remove-signature <es2abc路径>
codesign -s - -v <es2abc路径>