OrangeAppsRu / cordova-social-vk

Social API for VKontakte
Apache License 2.0
23 stars 28 forks source link

Проблема компиляцией под iOS #26

Open jet174 opened 7 years ago

jet174 commented 7 years ago

Доброго времени суток, не могу скомпилировать приложение выводит вот такую ошибку под системой iOS, (ionic framework), помогите пожалуйста решить:

 The following build commands failed:
            CompileC /var/root/Library/Developer/Xcode/DerivedData/vGym.pro-gmgamgauwfpfylfulycqqhdsjrjd/Build/Intermediates/vGym.pro.build/Debug-iphonesimulator/vGym.pro.build/Objects-normal/x86_64/SocialVk.o vGym.pro/Plugins/cordova-social-vk/SocialVk.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
        (1 failure)
        Error: Error code 65 for command: xcodebuild with args: -xcconfig,/gym/platforms/ios/cordova/build-debug.xcconfig,-workspace,vGym.pro.xcworkspace,-scheme,vGym.pro,-configuration,Debug,-sdk,iphonesimulator,-destination,platform=iOS Simulator,name=iPhone SE,build,CONFIGURATION_BUILD_DIR=/gym/platforms/ios/build/emulator,SHARED_PRECOMPS_DIR=/gym/platforms/ios/build/sharedpch
damirrrk commented 7 years ago

Присоединяюсь к вопросу.

roilen commented 7 years ago

Тоже самое. Есть решение?

roilen commented 7 years ago

Проблема решилась. Похоже, что в плагине лежит нерелевантный VKSDK, потому что в полном логи ошибки в Xcode написано, что Library VKSDK not found. Хотя библиотека подключена верно.

Решилось скачиванием последнего VKSDK с официального github, потом Xcode выдаст еще пару ошибок, их можно легко поправить и все получилось.

p3psic commented 7 years ago

Я столько намучился в одно время с ionic, точно больше никогда с ним работать не буду. Эта ошибка не vksdk, которая могла отсутствовать, так как она много весит и ее надо класть вручную, а например из-за некорректного конфига(отсутствие ключа) или же был не настроен xcode. Я даже помню как-то все сделаешь, а потом на другом компе начинаешь работать и опять на те же ошибки натыкаешься.

MasTeh commented 7 years ago

Народ, я с этим модулем промучался 3 дня. Решение очень простое. После установки плагина, заходите в папку ios, где его исходники, потом в папку VKSdk.framework, в ней Versions > A, от туда копируете папку Headers и файл VKSdk вставляете это в корневую папку VKSdk.framework.

kostap13 commented 7 years ago

@MasTeh спасибо!

MasTeh commented 7 years ago

Народ, хотите поржать? Я вновь столкнулся с этой проблемой и вновь долго и мучительно её решал. Потом начал рыть в интернетах, и наткнулся на свою же рекомендацию. Мораль такова - ведите личный дневник заметок.

damirrrk commented 7 years ago

@MasTeh Забавно! Мы уже пишем другой проект, и к кордове никогда уже думаю не вернемся :D

Finesse commented 4 years ago

Автоматизация решения от @MasTeh:

  1. Добавьте пару зависимостей в ваш NPM-проект:

    npm i -D rimraf ncp
  2. Добавьте скрипт-хук с таким содержимым в любую директорию проекта:

    const fs = require('fs');
    const path = require('path');
    const {promisify} = require('util');
    const ncp = promisify(require('ncp').ncp);
    const rimraf = promisify(require('rimraf'));
    const readFile = promisify(fs.readFile);
    const access = promisify(fs.access);
    const readdir = promisify(fs.readdir);
    
    // Why: https://github.com/OrangeAppsRu/cordova-social-vk/issues/26#issuecomment-311503502
    // Designed for version 1.0.5
    
    const frameworkDirectory = 'VKSdk.framework';
    const versionsDirectory = 'Versions';
    
    module.exports = async () => {
        const configXml = await readFile('config.xml', 'utf8');
        const appNameSearch = /<name>([a-z0-9\-_.]+)<\/name>/i.exec(configXml);
        if (!appNameSearch) {
            throw new Error('Couldn\'t find the application name in config.xml. Make sure you\'ve added a <name/> tag.');
        }
        const appName = appNameSearch[1];
    
        const pluginPath = `platforms/ios/${appName}/Plugins/cordova-social-vk`;
        try {
            await access(pluginPath);
        } catch (error) {
            throw new Error(`The cordova-social-vk plugin directory "${pluginPath}" doesn't exist. Either add the plugin, fix or remove this hook.`);
        }
    
        let versions;
        try {
            versions = await readdir(path.join(pluginPath, frameworkDirectory, versionsDirectory));
            if (versions.length === 0) {
                throw new Error();
            }
        } catch (error) {
            throw new Error(`The cordova-social-vk plugin file structure doesn't meet the expectations. Either fix this hook or remove it.`);
        }
    
        await rimraf(path.join(pluginPath, frameworkDirectory, `!(${versionsDirectory})`));
    
        await ncp(
            path.join(pluginPath, frameworkDirectory, versionsDirectory, versions[0]),
            path.join(pluginPath, frameworkDirectory),
        );
    };
  3. Привяжите этот хук к действию after_prepare Cordova. Для этого откройте ваш config.xml, найдите или добавьте тег <platform name="ios">...</platform> и добавьте внутрь тег:

    <hook type="after_prepare" src="путь/до/файла/хука.js" />

Готово. Теперь файлы будут копироваться автоматически при выполнении cordova prepare ..., cordova build ..., cordova run ... и cordova platform add ios.