2016-07-25 6 views
0

У меня есть проект в React Native, который имеет две разные схемы сборки и использует cocoapods. Для того, чтобы скомпилировать его я бегу:React Native: Bundle Identifier не существует

react-native run-ios --scheme="RNProject-(SCHEME_NAME)" 

Полученные в результате приложения, например:

./build/Build/Products/Debug/iphonesimulator/RNProject-customer1.app 
./build/Build/Products/Debug/iphonesimulator/RNProject-customer2.app 
  • Использование команды он строит для одной из схем сборки, но не для других
  • Xcode всегда создает проект для обеих схем сборки
  • Кроме того, в этом пути существует build/Build/Products/Debug-iphonesimulator/RNProject-customer1.app/Info.plist, и файл содержит val Идентификатор CFBundleIdentifier (это соответствует General > Identity > Bundle Identifier для каждого из двух схем сборки)
  • Настройки проекта кажется правильным для обоего схем (после проверки ios/RNProject.xcodeproj/project.pbxproj)
  • настройки схемы конкретной расположена в ios/Pods/Target Support Files/Pods-RNProject-customer1 и ios/Pods/Target Support Files/Pods-RNProject-customer2

Я пробовал разные способы ее решения:

  • Бег sudo react-native
  • Res tarting RN упаковщика
  • редактирование Info.plist
  • вручную Изменение строить местоположения

консоль:

** BUILD SUCCEEDED ** 

Installing build/Build/Products/Debug-iphonesimulator/RNProject.app 
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2): 
Failed to install the requested application 
An application bundle was not found at the provided path. 
Provide a valid path to the desired application bundle. 
Print: Entry, ":CFBundleIdentifier", Does Not Exist 
child_process.js:509 
    throw err; 
    ^

Error: Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier build/Build/Products/Debug-iphonesimulator/RNProject.app/Info.plist 
Print: Entry, ":CFBundleIdentifier", Does Not Exist 

    at checkExecSyncError (child_process.js:486:13) 
    at Object.execFileSync (child_process.js:506:13) 
    at ChildProcess.xcodeBuildProcess.on.code (node_modules/react-native/local-cli/runIOS/runIOS.js:109:36) 
    at emitTwo (events.js:106:13) 
    at ChildProcess.emit (events.js:191:7) 
    at maybeClose (internal/child_process.js:852:16) 
    at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5) 

ответ

0

Проблемы была как Реагировать Родные имена меток исполняемых файлов.

Мой проект Xcode создал два исполняемых файла с разными именами на основе настроек проекта Xcode.

Реагировать Native на других формах ручными исполняемого файла из .xcworkspace файла в этом сценарии (./node_modules/react-native/local-cli/runIOS/runIOS.js:57):

const inferredSchemeName = path.basename(xcodeProject.name, path.extname(xcodeProject.name)); 

Эти два подхода различны и приводят к двум различным имен исполняемых файлов (например, Xcode build/Build/Products/Debug-iphonesimulator/RNProject-customer1.app против React Родной build/Build/Products/Debug-iphonesimulator/RNProject.app).

У меня было настроенное значение для inferredSchemeName, чтобы соответствовать имени файла, созданного Xcode.

0

Мое решение аналогично:

  1. открытые ./node_modules/react-native/local-cli/runIOS.JS файл
  2. изменить путь сборки из:

    const getBuildPath = function(configuration = 'Debug', appName, isDevice) { 
        return `build/Build/Products/${configuration}-${isDevice ? 'iphoneos' : 'iphonesimulator'}/${appName}.app`; 
    }; 
    

в

const getBuildPath = function(configuration = 'Debug', appName, isDevice) { 
     return `build/Build/Products/${configuration}-${isDevice ? 'iphoneos' : 'iphonesimulator'}/${appName}.app`; 
    }; 
  • REMOVE "Build" в пути.

Я использую Xcode-бета 8.2

Смежные вопросы