我在Windows,Linux和OSX上使用FreeType没有一个问题,现在我将我的技术移植到IOS ......而且我找不到为它编译FreeType的方法.
起初我试图将每个FT文件放入我的项目中,但这显然不起作用.
然后我尝试按照本教程制作一个静态库.虽然我无法测试它是否适用于手臂目标,但它不适用于模拟器目标.
当试图将构建的库链接到XCode时,它说"libfreetype-simulator.a,文件是为存档而构建的,而不是被链接的架构(i386)",这很好,因为命令"lipo -info libfreetype-simulator.a"告诉我该文件是为x86_64构建的.我尝试用"./configure --i386-apple-darwin"配置它,这是日志.但是,最终的拱形是x86_64.
我怎样才能为i386,iphone模拟器构建freetype?我真的没有线索.
我今天在XCode下对lambdas的这种奇怪行为感到非常痛苦 - 在尝试跟踪iOS中围绕代码的几个内存泄漏之后,我将其缩小到这个(和类似的)代码片段,在那里我分配所有权使用共享指针的延迟任务的东西:
void DBStorage::dispose(std::shared_ptr<DataChunk>& dc)
{
backgroundQueue.queueTask([=]() {
assert( dc.use_count() == 1 );
if (dc->isDirty()) {
//store to disk
}
});
}
Run Code Online (Sandbox Code Playgroud)
(注意,运行lambda时共享指针的使用计数始终为1)
在执行之后,这个任务是null-ified pendingJob = nullptr;,我希望它可以调用所有按值捕获的对象的析构函数,从而调用析DataChunk构函数.但是,看起来在XCode/LLVM下 lc的析构函数永远不会被调用; 明确地调用它的dtor,使用mutable和删除std::function简单的delete也不起作用.
这是标准行为吗?我当然可以手动调用dc.reset()它按预期工作,但这很有必要使用共享指针.
解决方案 显然,这是一个已知的gcc bug.
的Contrib
具有Xcode 5.0.2/clang 3.3输出的独立样品
#include <iostream>
#include <memory>
void fnRef(std::shared_ptr<int>& ptr)
{
auto lambda = [=]() { std::cout << ptr.use_count() << ':' << __PRETTY_FUNCTION__ << '\n'; };
lambda();
}
void fnVal(std::shared_ptr<int> ptr) …Run Code Online (Sandbox Code Playgroud) 我在我的iPhone项目中添加资源(大量的.pngs和其他)将文件夹拖到它并选择"为任何添加的文件夹创建文件夹引用",以保留文件夹结构.它们已正确添加到"复制资源"构建阶段.
问题是,我浪费了很多时间,因为当我创建/删除/更新新资源时,它通常会忽略已更改的文件并坚持使用旧版本.
看起来它只是在更改资源时尝试更新资源,但它无法看到更改.在模拟器中,可以手动更新.app中的文件,但是当在设备上工作时,它会抱怨某些资源的代码符号已经改变!
唯一可靠的办法,我发现,迫使它来更新一切删除生成的产品,应用和设备的应用程序有时,直到它最终决定对旧版本给忘了,但是这样做对每个资源的变化是在浪费我疯狂的时间(游戏内容经常变化).
因此,简而言之:如何强制XCode禁用"版本控制"并且只是废弃所有资源并每次都复制它们?
谢谢!
编辑:我发现删除"build"文件夹中内置的.app文件夹总是强制XCode添加新文件...
当我删除该文件夹时,我仍然不知道它保存旧文件的位置,但这是更好的,因为它只按预期复制新资源.所以简单的脚本就好
rm -rf "$CODESIGNING_FOLDER_PATH"
Run Code Online (Sandbox Code Playgroud)
在每个构建中删除文件夹的技巧吗?
不幸的是,XCode显然在执行Build Phases选项卡之前运行代码签名,因此它更新旧目标,脚本删除旧目标,然后崩溃抱怨没有找到代码签名资源.
所以...我必须坚持手动删除文件,或者有没有办法在代码签名之前运行脚本?