Module AppRegistry is not a registered callable module in SDK 33

Hello!

I have an ejected app, and I recently upgraded from SDK 32 to SDK 33.

I can run the iOS build just fine in XCode, pointing at localhost using expo start. However, when I run xcodebuild (via Fastlane) and expo publish to a release channel, I get the dreaded “Module AppRegistry is not a registered callable module” screen of death on app open.

I understand that this usually comes from some sort of version mismatch, so I ran a expo publish --clear… it didn’t help.

I did a massive grep of all of my ios files, switched all instances of 32.0.0 to 33.0.0.

Here’s my package.json dependencies:

"dependencies": {
    "@expo/react-native-action-sheet": "^1.0.2",
    "@expo/react-native-fade-in-image": "^1.0.0",
    "@expo/react-native-read-more-text": "^1.0.0",
    "@expo/react-native-touchable-native-feedback-safe": "^1.0.0",
    "@expo/vector-icons": "^10.0.0",
    "axios": "^0.18.0",
    "babel-plugin-transform-remove-console": "^6.9.1",
    "card-validator": "^3.0.0",
    "clamp": "^1.0.1",
    "classnames-react-native": "^1.1.0",
    "color": "^3.1.0",
    "country-list": "^2.1.0",
    "debounce-async": "0.0.2",
    "expo": "^33.0.7",
    "expo-analytics": "^1.0.7",
    "expo-analytics-amplitude": "^5.0.1",
    "expo-asset": "^5.0.1",
    "expo-blur": "^5.0.1",
    "expo-constants": "^5.0.1",
    "expo-file-system": "^5.0.1",
    "expo-font": "^5.0.1",
    "expo-linear-gradient": "^5.0.1",
    "expokit": "^33.0.3",
    "form-urlencoded": "^3.0.0",
    "immutable": "^3.8.1",
    "lodash": "^4.17.10",
    "lottie-react-native": "^2.6.1",
    "moment": "^2.18.1",
    "prop-types": "^15.6.0",
    "react": "16.8.3",
    "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz",
    "react-native-animatable": "^1.2.4",
    "react-native-aws3": "0.0.8",
    "react-native-cookie": "https://github.com/sickapp/react-native-cookie/tarball/master",
    "react-native-easy-toast": "^1.2.0",
    "react-native-expo-image-cache": "^3.2.0",
    "react-native-flip-card": "^3.5.2",
    "react-native-input-scroll-view": "^1.6.7",
    "react-native-iphone-x-helper": "^1.0.3",
    "react-native-keyboard-aware-scroll-view": "^0.5.0",
    "react-native-loading-spinner-overlay": "^0.5.2",
    "react-native-material-kit": "https://github.com/sickapp/mk/tarball/master",
    "react-native-onesignal": "^3.2.12",
    "react-native-search-box": "https://github.com/sickapp/react-native-search-box/tarball/master",
    "react-native-snap-carousel": "^3.6.0",
    "react-native-stripe-api": "0.0.6",
    "react-native-tab-view": "0.0.69",
    "react-native-vector-icons": "^4.6.0",
    "react-navigation": "3.11.0",
    "react-redux": "^5.0.7",
    "redux": "^3.6.0",
    "redux-effex": "^1.1.2",
    "redux-form": "^7.4.2",
    "reselect": "^4.0.0",
    "rn-placeholder": "^1.2.0",
    "sentry-expo": "~1.13.0",
    "shortid": "^2.2.8",
    "stripe-client": "^1.1.5",
    "tcomb-form-native": "^0.6.7",
    "tcomb-validation": "^3.4.1",
    "time-js": "0.0.5",
    "validator": "^10.11.0"
  },
  "devDependencies": {
    "@babel/core": "^7.4.5",
    "@babel/preset-env": "^7.4.5",
    "@babel/register": "^7.4.4",
    "@wdio/appium-service": "^5.9.3",
    "@wdio/cli": "^5.10.3",
    "@wdio/local-runner": "^5.10.1",
    "@wdio/mocha-framework": "^5.10.1",
    "@wdio/spec-reporter": "^5.9.3",
    "@wdio/sync": "^5.10.1",
    "appium": "^1.13.0",
    "aws-sdk": "^2.485.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-eslint": "^8.2.2",
    "babel-preset-expo": "^5.0.0",
    "chai": "^4.1.2",
    "chalk": "^2.4.2",
    "chromedriver": "^75.0.0",
    "depcheck": "^0.6.9",
    "enzyme": "^3.3.0",
    "enzyme-adapter-react-16": "^1.1.1",
    "eslint": "^5.3.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-config-prettier": "^4.3.0",
    "eslint-loader": "^1.0.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.1.1",
    "eslint-plugin-prettier": "^3.1.0",
    "eslint-plugin-react": "^7.12.4",
    "eslint-plugin-react-native": "^3.6.0",
    "expo-cli": "^2.21.1",
    "fs-extra": "^8.0.1",
    "husky": "^2.1.0",
    "jest": "^23.6.0",
    "jest-expo": "^33.0.2",
    "jimp": "^0.6.4",
    "lint-staged": "^8.1.5",
    "mocha": "^5.2.0",
    "ncp": "^2.0.0",
    "node-fetch": "^2.2.0",
    "prettier": "^1.18.2",
    "react-dom": "^16.3.2",
    "react-native-unimodules": "^0.4.1",
    "react-native-version": "^2.6.7",
    "react-test-renderer": "^16.3.2",
    "reactotron-react-native": "^2.0.0-beta.3",
    "reactotron-redux": "^1.13.0",
    "replace-in-file": "^3.4.3",
    "simple-git": "^1.107.0",
    "wdio-chromedriver-service": "^5.0.1",
    "zip-local": "^0.3.4"
  },

Here’s my app.json:

"expo": {
    "name": "Coolio",
    "description": "So cool, yo",
    "slug": "coolio4",
    "privacy": "public",
    "scheme": "coolio",
    "sdkVersion": "33.0.0",
    "platforms": [
      "ios",
      "android"
    ],
    "version": "9.0.0",
    "orientation": "portrait",
    "icon": "assets/images/app-icon.png",
    "splash": {
      "image": "assets/images/splash.png",
      "resizeMode": "cover",
      "backgroundColor": "#000"
    },
    "ios": {
      "bundleIdentifier": "com.company.coolio",
      "supportsTablet": true,
      "buildNumber": "21",
      "infoPlist": {
        "NSLocationAlwaysUsageDescription": "Very cool app",
        "NSCameraUsageDescription": "Very cool app",
        "NSMicrophoneUsageDescription": "Very cool app",
        "NSPhotoLibraryUsageDescription": "Very cool apps"
      },
      "publishBundlePath": "ios/coolio/Supporting/shell-app.bundle",
      "publishManifestPath": "ios/coolio/Supporting/shell-app-manifest.json"
    },
    "android": {
      "package": "com.sickapp.coolio",
      "versionCode": 12,
      "publishBundlePath": "android/app/src/main/assets/shell-app.bundle",
      "publishManifestPath": "android/app/src/main/assets/shell-app-manifest.json"
    },
    "notification": {
      "icon": "assets/images/notif-icon.png"
    },
    "assetBundlePatterns": [
      "assets/videos/**",
      "assets/images/**",
      "assets/fonts/**"
    ],
    "updates": {
      "fallbackToCacheTimeout": 10000
    },
    "hooks": {
      "postPublish": [
        {
          "file": "sentry-expo/upload-sourcemaps",
          "config": {
            "organization": "coolio",
            "project": "coolio-app",
            "authToken": "[[ redacted ]]"
          }
        }
      ]
    },
    "isDetached": true,
    "detach": {
      "iosExpoViewUrl": "https://s3.amazonaws.com/exp-exponent-view-code/ios-v2.10.2-sdk33.0.0-c59c23cd-1d49-49d2-a633-d03f9d554cf6.tar.gz",
      "androidExpoViewUrl": "https://s3.amazonaws.com/exp-exponent-view-code/android-v2.10.7-sdk33.0.0-3ff7f3bf-8e53-4d61-b963-1d7d92a77d79.tar.gz"
    }
  },

What is going on here? Any ideas?