Detached expo app stuck on iOS splash screen - ExponentGLObjectManager.createObjectAsync is not available.
See original GitHub issueDetached expo app is stuck on iOS splash screen. The log is showing:
webgltexture-loader-expo: ExponentGLObjectManager.createObjectAsync is not available. Make sure to use the correct version of Expo
Environment
Environment: OS: macOS Sierra 10.12.6 Node: 9.8.0 Yarn: 1.5.1 npm: 5.6.0 Watchman: 4.9.0 Xcode: Xcode 9.2 Build version 9C40b Android Studio: 2.2 AI-145.3276617
Packages: (wanted => installed) expo: ^27.0.0 => 27.0.1 react: 16.3.1 => 16.3.1 react-native: https://github.com/expo/react-native/archive/sdk-27.0.1.tar.gz => 0.55.2
Diagnostics report: https://exp-xde-diagnostics.s3.amazonaws.com/momoumar-a1457a4d-7977-4a4f-a49f-a6d0cdb3bf2d.tar.gz
iOS, Android, Client, Standalone, ExpoKit
Steps to Reproduce
1-Detach an expo app using npm run eject. 2- pod install in ios folder 3- react-native run-ios
###Expected Behavior
4-Expected the app to launch on the simulator
###Observed Behavior 4-App stuck on the splash screen. 5-The console shows: webgltexture-loader-expo: ExponentGLObjectManager.createObjectAsync is not available. Make sure to use the correct version of Expo
22:04:42 [exp] Finished building JavaScript bundle in 6257ms.
22:04:58 [exp] webgltexture-loader-expo: ExponentGLObjectManager.createObjectAsync is not available. Make sure to use the correct version of Expo
22:04:59 [exp] Running application "main" with appParams: {"rootTag":1,"initialProps":{"exp":{"manifest":{"description":"A Simple addressing system for the unaddressed bussinesses.","developer":{"projectRoot":"/Users/mos/Desktop/xyz-expo","tool":"exp"},"privacy":"public","detach":{"scheme":"exp06bd8b78e979493d97d76b540f17e00c","androidExpoViewUrl":"https://s3.amazonaws.com/exp-exponent-view-code/android-v2.4.0-sdk26.0.0-e63d9209-070c-4118-b06b-c60e82da0b66.tar.gz","iosExpoViewUrl":"https://s3.amazonaws.com/exp-exponent-view-code/ios-v2.5.4-sdk27.0.0-e68cfb94-9b7e-4510-aab9-8f375e187b0b.tar.gz"},"loadedFromCache":false,"env":{},"isDetached":true,"orientation":"portrait","xde":true,"id":"@momoumar/xyz-expo","iconUrl":"http://packager.8f-2ui.momoumar.xyz-expo.exp.direct:80/assets/./app.png","hostUri":"8f-2ui.momoumar.xyz-expo.exp.direct:80","mainModuleName":"index","sdkVersion":"27.0.0","primaryColor":"#00AAFF","debuggerHost":"packager.8f-2ui.momoumar.xyz-expo.exp.direct:80","androidStatusBar":{"barStyle":"dark-content","backgroundColor":"#ffffff"},"android":{"package":"codes.xyz"},"isVerified":true,"packagerOpts":{"lanType":"ip","dev":true,"minify":false,"urlRandomness":"8f-2ui","hostType":"tunnel"},"ios":{"publishBundlePath":"ios/xyz-expo/Supporting/shell-app.bundle","publishManifestPath":"ios/xyz-expo/Supporting/shell-app-manifest.json","bundleIdentifier":"xyz"},"bundleUrl":"http://packager.8f-2ui.momoumar.xyz-expo.exp.direct:80/index.bundle?platform=ios&dev=true&minify=false&hot=false&assetPlugin=%2FUsers%2Fmos%2FDesktop%2Fxyz-expo%2Fnode_modules%2Fexpo%2Ftools%2FhashAssetFiles","icon":"./app.png","slug":"xyz-expo","version":"1.0.0","name":"xyz-expo","logUrl":"http://8f-2ui.momoumar.xyz-expo.exp.direct:80/logs","splash":{"resizeMode":"cover","image":"./splash.png","backgroundColor":"#ffffff","imageUrl":"http://packager.8f-2ui.momoumar.xyz-expo.exp.direct:80/assets/./splash.png"}},"initialUri":"exp06bd8b78e979493d97d76b540f17e00c://8f-2ui.momoumar.xyz-expo.exp.direct:80","appOwnership":"standalone","shell":1}}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF
###Pod file:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
target 'xyz-expo' do
pod 'ExpoKit',
:git => "http://github.com/expo/expo.git",
:tag => "ios/2.5.4",
:subspecs => [
"Core",
"CPP",
"GL"
]
pod 'React',
:path => "../node_modules/react-native",
:subspecs => [
"Core",
"ART",
"RCTActionSheet",
"RCTAnimation",
"RCTCameraRoll",
"RCTGeolocation",
"RCTImage",
"RCTNetwork",
"RCTText",
"RCTVibration",
"RCTWebSocket",
"DevSupport",
"CxxBridge"
]
pod 'yoga',
:path => "../node_modules/react-native/ReactCommon/yoga"
pod 'DoubleConversion',
:podspec => "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec",
:inhibit_warnings => true
pod 'Folly',
:podspec => "../node_modules/react-native/third-party-podspecs/Folly.podspec",
:inhibit_warnings => true
pod 'glog',
:podspec => "../node_modules/react-native/third-party-podspecs/GLog.podspec",
:inhibit_warnings => true
post_install do |installer|
installer.pods_project.main_group.tab_width = '2';
installer.pods_project.main_group.indent_width = '2';
installer.pod_targets.each do |target|
if target.pod_name == 'ExpoKit'
target.native_target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'EX_DETACHED=1'
# needed for GoogleMaps 2.x
config.build_settings['FRAMEWORK_SEARCH_PATHS'] ||= []
config.build_settings['FRAMEWORK_SEARCH_PATHS'] << '${PODS_ROOT}/GoogleMaps/Base/Frameworks'
config.build_settings['FRAMEWORK_SEARCH_PATHS'] << '${PODS_ROOT}/GoogleMaps/Maps/Frameworks'
end
end
if ['Amplitude-iOS','Analytics','AppAuth','Branch','CocoaLumberjack','FBSDKCoreKit','FBSDKLoginKit','FBSDKShareKit','GPUImage','JKBigInteger2'].include? target.pod_name
target.native_target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
end
end
# Build React Native with RCT_DEV enabled
next unless target.pod_name == 'React'
target.native_target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'RCT_DEV=1'
end
end
end
end
###package.json
{
"name": "xyz-expo",
"version": "1.0.0",
"private": true,
"devDependencies": {
"exp": "49.2.2",
"jest-expo": "^27.0.0"
},
"scripts": {
"test": "node node_modules/jest/bin/jest.js",
"test:watch": "node node_modules/jest/bin/jest.js --watch",
"flow": "flow check --show-all-errors | flow-result-checker",
"lint": "eslint App.js src/",
"deploy:expo": "exp publish",
"deploy": "yarn deploy:expo",
"start": "node node_modules/react-native/local-cli/cli.js start"
},
"jest": {
"preset": "jest-expo",
"transformIgnorePatterns": [
"node_modules/(?!react-native|react-navigation|expo|native-base-shoutem-theme|@shoutem|react-clone-referenced-element|native-base|@expo|mobx-react)"
],
"testResultsProcessor": "./node_modules/jest-junit-reporter"
},
"dependencies": {
"expo": "^27.0.0",
"react": "16.3.1",
"react-native": "https://github.com/expo/react-native/archive/sdk-27.0.1.tar.gz",
"react-native-keyboard-spacer": "^0.4.1",
"react-native-loading-spinner-overlay": "^0.5.2",
"react-navigation": "1.5.11"
}
}
Issue Analytics
- State:
- Created 5 years ago
- Comments:6 (3 by maintainers)
yeah I agree, textures should be created with
gl.createTexture()
if possible. but for advanced usecases where texture come from native side, like Camera case, it make sense. I kinda liked the createObjectAsync idea because it was allowing extensible format for textures, but anyway, for current Expo implementation it’s ok (only thing is it’s a breaking change and i don’t think it was mentioned, or maybe i missed it?).I released a new version of
gl-react-expo
(& the webgltexture-loader library) so this now works again! Cheers 😃https://expo.io/@gre/gl-react-camera-effects
BTW some thoughts for future: in react-native-webgl fork, we had a diverged idea that maybe we should eventually converge, https://github.com/react-community/react-native-webgl#rn-extension this loadTexture with a config object that can be extended by third party library, for instance, one library could add camera support, one could bring video support, one could add “view as a texture” support like it is already implemented by https://github.com/gre/react-native-webgl-view-shot
@gre The change with camera texture was mentioned in the blog post, but to be honest I thought no one is using
createObjectAsync
for other cases since it was undocumented and a bit useless, my bad 😂 Sure, if it’s extensible then it makes more sense, so I agree we should converge it. 👍