XCode中,如果直接将 xxx.a 文件拖进到项目中,有时会出现异常。

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lxxx
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lxxx is not an object file (not allowed in a library)

解决方法:在Build Settings选项中,找到Library Search Paths,将 xxx.a 所在的目录加入进去。


比如检查静态库test.a中的arm64架构是否支持bitcode,可以用otool命令,如下:

otool -lv -arch arm64 test.a

然后搜bitcode的关键词打印,如果有,则表示支持bitcode,否则就是不支持bitcode。


iOS只有设置AVAudioSessionCategoryPlayAndRecord时,才能在扬声器和听筒间切换。

其他几个坑:

  1. audiosession处于激活状态时,才会收到打断开始和结束的通知。
  2. setPreferredIOBufferDuration 设置的值太小会影响性能,默认20ms,低端机用40ms,但如果是蓝牙接入,则必须低于30ms才行,否则无声。
  3. iOS系统的硬件回声消除需要设置通话音量才行。


如果Git密码更新后,拉取代码仓库会报如下错误:

​fatal: Authentication failed for ... ​


解决方法是执行下面命令:


​git config --global credential.helper osxkeychain​ 

再次拉取代码会提示输入账号密码。

C++ volatile的作用

volatile 就是告诉编译器不要把 volatile 修饰的数据优化到寄存器里,每次读取和写入都操作原始的数据地址。

Android中"UserManger.isUserAGoat()"的合适案例

问题描述:

我正在看在安卓4.2里介绍的新API。当看到“UserManger”类时,我遇到了如下的“method”: public boolean isUserAGoat() Used to determine whether the user making this call is subject to teleportations.

Returns whether the user making this call is a goat. 这个应该怎样使用和什么时候使用?

回答:

根据他们的资料,在API21前,这个“method”用来返回“false”

/**
* Used to determine whether the user making this call is subject to
* teleportations.
* @return whether the user making this call is a goat
*/
public boolean isUserAGoat() {
return false;
}

看起来这个“method”对我们开发者没有真正的用途。一些人之前认为它可能是个复活节彩蛋。 

再次编辑: 在API21它改为判断是否存在有包“com.coffeestainstudios.goatsimulator”的已安装app。

/**
* Used to determine whether the user making this call is subject to
* teleportations.
*
* As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
* now automatically identify goats using advanced goat recognition technology.
*
* @return Returns true if the user making this call is a goat.
*/
public boolean isUserAGoat() {
return mContext.getPackageManager()
.isPackageAvailable(“com.coffeestainstudios.goatsimulator”);
}