Facebook-iOS-SDK: Как исправить фреймворк сборки и добавить его в проект?

Разрабатываю приложение для iPad.

Сейчас я тестирую приложение на iPad-5.1 Simulator.

И к моему несчастью приложение сваливается.

1) Я использую FacebookSDK 3.0
2) Компилирую FacebookSDK в Framework FBiOSSDK
3) Добавляю Framework FBiOSSDK для проецирования
4) См. журнал Linker
5) Неопределенные символы для архитектуры i386: «_sqlite3_open_v2» и многие-многие символы «_sqlite3_ *».

Может быть, я установил неправильные параметры для проекта facebook-sdk при его сборке во фреймворке?

Кто-нибудь может помочь?

После поиска нахожу решение:

"Добавить в проект libsqlite3.0.dylib"

Но компоновщик сказал: "игнорирование файла /path/libsqlite3.dylib, отсутствие требуемой архитектуры i386 в файле"

-- Главная проблема --

Через час я обнаружил, что неправильно связываю фреймворк.

Скрипт создает его в локальном каталоге (не в System / Library / Frameworks или Library / Frameworks).

После добавления Framework Search Paths изменится на значение, отличное от значения по умолчанию.

Как правильно построить фреймворк?

Спасибо!


person gaussblurinc    schedule 27.07.2012    source источник
comment
попробуйте очистить пути поиска Framework в настройках сборки проекта, вот вопрос о libsqlite: stackoverflow.com/questions/1456185/   -  person medvedNick    schedule 27.07.2012
comment
и убедитесь, что вы скомпилировали FBiOSSDK для i386 (см. настройки сборки - ›архитектуры)   -  person medvedNick    schedule 27.07.2012
comment
спасибо, я понимаю свою вину. но как скомпилировать проект в * .framework, чтобы добавить его из каталога default / framework? Я создаю его с помощью сценариев оболочки, которые идут с facebook-sdk   -  person gaussblurinc    schedule 27.07.2012
comment
Насколько я понимаю, вам следует добавить эту структуру только в рамки вашего проекта (на вкладке «Сводка» в настройках вашего проекта). Вы также можете прочитать это: db-in .com / blog / 2011/07 / universal-framework-iphone-ios-2-0 Посередине есть несколько хитростей по настройке параметров проекта.   -  person medvedNick    schedule 27.07.2012
comment
да, мне нужно добавить фреймворк, но сначала мне нужно создать его в каталоге по умолчанию, например / System / Library / Frameworks или / Library / Frameworks. Но скрипты, которые я использую (автор фреймворка добавляет его в facebook-sdk), создают фреймворк в локальном каталоге, а не в каталоге фреймворка по умолчанию   -  person gaussblurinc    schedule 27.07.2012
comment
вы можете установить для местоположения сборки все, что вам нужно, но зачем вам это нужно? вы можете добавить фреймворк из любого каталога, насколько я знаю   -  person medvedNick    schedule 27.07.2012
comment
да, но, как говорят многие ребята: вам нужно установить по умолчанию Framework Search Paths. после добавления фреймворка он перепишет его путь в Пути поиска фреймворка   -  person gaussblurinc    schedule 27.07.2012


Ответы (2)


Итак, спустя долгое время я делаю такие вещи, чтобы этот FacebookSDK работал:

1) Сначала я удаляю сборку фреймворка FacebookSDK (rm -rf) и запускаю скрипт для создания фреймворка (build_framework.sh).

2) После этого я добавляю в проект (проект -> этапы сборки -> связать двоичный файл с библиотеками) FacebookSDK.framework < / strong> (из локального каталога с кнопкой добавить другое) и libsqlite3.0dylib и libsqlite3.dylib (просто выполните поиск в поле поиска!)

0) или 3) И после этого я делаю это: нахожу каталог ~ / Library / Developer / Xcode / DerivedData и удаляю из него ВСЕ. (используйте команду rm -rf dir_name / *)

Вы можете сделать это с шага 3), который я также назвал шагом 0).

Здесь я предоставляю сценарий, который может вам помочь

#!/usr/bin/perl
my $pathToCacheDirectory = qq(~/Library/Developer/Xcode/DerivedData/);

sub TaskToDo{
    my ($refToArgv)=@_;
    die "can't work with too much parameters" unless(scalar(@$refToArgv)==1);
    my $what = shift @$refToArgv;
    my $time = 30; #wait 30 seconds in each iteration
    my $workRef = sub{
        print "i will delete: ";
        print qx(ls $pathToCacheDirectory);
    qx(rm -rf $pathToCacheDirectory);
    };
    #view help
    if ($what eq 'help'){
        print qx(perldoc -t $0);
    }
    #list directory 
    if ($what eq 'watch'){
    print qx(ls $pathToCacheDirectory);
    }
    #kill files instantly
    if ($what eq 'now'){
    print 'kill now'.qq(\n);
    $workRef->();
    print 'see result'.qq(\n);
    print qx(ls $pathToCacheDirectory);
    }
    #switch on watcher
    if ($what eq 'work'){
    for(;;){
        #in INF loop
        for my $s(0..4){
        #print "this is <<$_>>\n";
        print "time remaining: ".(5-$s)*$time." sec \n";
        sleep($time);
        }
        $workRef->();    
        sleep(10);
    }
    }
} 

TaskToDo(\@ARGV);



__END__

=head1 DESCRIPTION

This script clear directory with cache from Xcode

    -- 'help'  will show this log

    -- 'work'  will run script as observer and killer

    -- 'watch' will show info about directory with cache

    -- 'now'   will kill all instantly

    Example: perl scriptName.pl help

=cut
person gaussblurinc    schedule 27.07.2012

Решение, которое я нашел, заключалось в том, чтобы перейти к Target Info и удалить путь поиска Framework, созданный XCode. Тогда все скомпилировалось правильно.

person Abo3atef    schedule 17.11.2013