Unable to Run Sample PDFTron Code on iOS using Expo

,

Product: PDFTronSDK iOS

Product Version: Latest

Please give a brief summary of your issue:
Unable to run Sample PDFTron Viewer in iOS using Expo

Please describe your issue and provide steps to reproduce it:
I have downloaded the sample PDFTron Viewer from GitHub - PDFTron/react-native-sample: Sample to demonstrate integrating PDFTron in React Native
and have not been able to run it.

When I run “expo run:ios” while installing the Cocoapods, i get the message

**Couldn't install : PDFNet. Updating the Pods project and trying again...**

and then a final message:

Something went wrong running `pod install` in the `ios` directory.
Command  `pod install --repo-update` failed.
Cause: This is often due to native package versions mismatching. Try deleting the 'ios/Pods' folder or the 'ios/Podfile.lock' and run 'npx pod-install' ...

I delete both ios/Pods and ios/Podfile.lock and run ‘npx pod-install’ and get

Scanning for pods...
1.11.3
> pod install
Using Expo modules
Auto-linking React Native modules for target `ReactNativeSample`: RNFileViewer, RNGestureHandler, RNPdftron, RNScreens, and react-native-safe-area-context
[Codegen] Generating ./build/generated/ios/React-Codegen.podspec.json
Analyzing dependencies
Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`
[Codegen] Found FBReactNativeSpec
Fetching podspec for `PDFNet` from `https://pdftron.com/downloads/ios/react-native/latest.podspec`
Fetching podspec for `RCT-Folly` from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`
Fetching podspec for `boost` from `../node_modules/react-native/third-party-podspecs/boost.podspec`
Fetching podspec for `glog` from `../node_modules/react-native/third-party-podspecs/glog.podspec`
Downloading dependencies
Installing CocoaAsyncSocket (7.6.5)
Installing DoubleConversion (1.1.6)
Installing EXApplication (4.2.2)
Installing EXConstants (13.2.3)
Installing EXDocumentPicker (10.3.0)
Installing EXFileSystem (14.1.0)
Installing EXFont (10.2.0)
Installing EXSharing (10.3.0)
Installing EXSplashScreen (0.16.1)
Installing Expo (46.0.8)
Installing ExpoKeepAwake (10.2.0)
Installing ExpoModulesCore (0.11.4)
Installing FBLazyVector (0.69.4)
Installing FBReactNativeSpec (0.69.4)
Installing Flipper (0.125.0)
Installing Flipper-Boost-iOSX (1.76.0.1.11)
Installing Flipper-DoubleConversion (3.2.0.1)
Installing Flipper-Fmt (7.1.7)
Installing Flipper-Folly (2.6.10)
Installing Flipper-Glog (0.5.0.5)
Installing Flipper-PeerTalk (0.0.4)
Installing Flipper-RSocket (1.4.3)
Installing FlipperKit (0.125.0)
Installing OpenSSL-Universal (1.1.1100)
Installing PDFNet (3.0.3-7)
Installing RCT-Folly (2021.06.28.00-v2)
Installing RCTRequired (0.69.4)
Installing RCTTypeSafety (0.69.4)
Installing RNFileViewer (2.1.5)
Installing RNGestureHandler (2.5.0)
Installing RNPdftron (3.0.3-7)
Installing RNScreens (3.15.0)
Installing React (0.69.4)
Installing React-Codegen (0.69.4)
Installing React-Core (0.69.4)
Installing React-CoreModules (0.69.4)
Installing React-RCTActionSheet (0.69.4)
Installing React-RCTAnimation (0.69.4)
Installing React-RCTBlob (0.69.4)
Installing React-RCTImage (0.69.4)
Installing React-RCTLinking (0.69.4)
Installing React-RCTNetwork (0.69.4)
Installing React-RCTSettings (0.69.4)
Installing React-RCTText (0.69.4)
Installing React-RCTVibration (0.69.4)
Installing React-bridging (0.69.4)
Installing React-callinvoker (0.69.4)
Installing React-cxxreact (0.69.4)
Installing React-jsi (0.69.4)
Installing React-jsiexecutor (0.69.4)
Installing React-jsinspector (0.69.4)
Installing React-logger (0.69.4)
Installing React-perflogger (0.69.4)
Installing React-runtimeexecutor (0.69.4)
Installing ReactCommon (0.69.4)
Installing SocketRocket (0.6.0)
Installing Yoga (1.14.0)
Installing YogaKit (1.18.1)
Installing boost (1.76.0)
Installing fmt (6.2.1)
Installing glog (0.3.5)
[!] /bin/bash -c 
set -e
#!/bin/bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

set -e

PLATFORM_NAME="${PLATFORM_NAME:-iphoneos}"
CURRENT_ARCH="${CURRENT_ARCH}"

if [ -z "$CURRENT_ARCH" ] || [ "$CURRENT_ARCH" == "undefined_arch" ]; then
    # Xcode 10 beta sets CURRENT_ARCH to "undefined_arch", this leads to incorrect linker arg.
    # it's better to rely on platform name as fallback because architecture differs between simulator and device

    if [[ "$PLATFORM_NAME" == *"simulator"* ]]; then
        CURRENT_ARCH="x86_64"
    else
        CURRENT_ARCH="arm64"
    fi
fi

if [ "$CURRENT_ARCH" == "arm64" ]; then
    cat <<\EOF >>fix_glog_0.3.5_apple_silicon.patch
diff --git a/config.sub b/config.sub
index 1761d8b..43fa2e8 100755
--- a/config.sub
+++ b/config.sub
@@ -1096,6 +1096,9 @@ case $basic_machine in
 		basic_machine=z8k-unknown
 		os=-sim
 		;;
+	arm64-*)
+		basic_machine=$(echo $basic_machine | sed 's/arm64/aarch64/')
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
EOF

    patch -p1 config.sub fix_glog_0.3.5_apple_silicon.patch
fi

export CC="$(xcrun -find -sdk $PLATFORM_NAME cc) -arch $CURRENT_ARCH -isysroot $(xcrun -sdk $PLATFORM_NAME --show-sdk-path)"
export CXX="$CC"

# Remove automake symlink if it exists
if [ -h "test-driver" ]; then
    rm test-driver
fi

# Manually disable gflags include to fix issue https://github.com/facebook/react-native/issues/28446
sed -i '' 's/\@ac_cv_have_libgflags\@/0/' src/glog/logging.h.in
sed -i '' 's/HAVE_LIB_GFLAGS/HAVE_LIB_GFLAGS_DISABLED/' src/config.h.in

./configure --host arm-apple-darwin

cat << EOF >> src/config.h
/* Add in so we have Apple Target Conditionals */
#ifdef __APPLE__
#include <TargetConditionals.h>
#include <Availability.h>
#endif

/* Special configuration for ucontext */
#undef HAVE_UCONTEXT_H
#undef PC_FROM_UCONTEXT
#if defined(__x86_64__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip
#elif defined(__i386__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip
#endif
EOF

# Prepare exported header include
EXPORTED_INCLUDE_DIR="exported/glog"
mkdir -p exported/glog
cp -f src/glog/log_severity.h "$EXPORTED_INCLUDE_DIR/"
cp -f src/glog/logging.h "$EXPORTED_INCLUDE_DIR/"
cp -f src/glog/raw_logging.h "$EXPORTED_INCLUDE_DIR/"
cp -f src/glog/stl_logging.h "$EXPORTED_INCLUDE_DIR/"
cp -f src/glog/vlog_is_on.h "$EXPORTED_INCLUDE_DIR/"

patching file config.sub
checking for a BSD-compatible install... /usr/local/bin/ginstall -c
checking whether build environment is sane... yes
checking for arm-apple-darwin-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... /usr/local/bin/gmkdir -p
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for arm-apple-darwin-gcc... /Library/Developer/CommandLineTools/usr/bin/cc -arch arm64 -isysroot 
checking whether the C compiler works... no
xcrun: error: SDK "iphoneos" cannot be located
xcrun: error: SDK "iphoneos" cannot be located
xcrun: error: SDK "iphoneos" cannot be located
xcrun: error: unable to lookup item 'Path' in SDK 'iphoneos'
/Users/ken/Library/Caches/CocoaPods/Pods/External/glog/2263bd123499e5b93b5efe24871be317-3d02b/missing: Unknown `--is-lightweight' option
Try `/Users/ken/Library/Caches/CocoaPods/Pods/External/glog/2263bd123499e5b93b5efe24871be317-3d02b/missing --help' for more information
configure: WARNING: 'missing' script is too old or missing
configure: error: in `/Users/ken/Library/Caches/CocoaPods/Pods/External/glog/2263bd123499e5b93b5efe24871be317-3d02b':
configure: error: C compiler cannot create executables
See `config.log' for more details

Couldn't install Pods. Updating the Pods project and trying again...

Please provide a link to a minimal sample where the issue is reproducible:

Hi Ken,

Thank you for reaching out.

The error shown seems to be associated with Command Line Tools. Can you make sure they are properly installed? Try the following command:

sudo xcode-select --switch /Applications/Xcode.app

Refer to this StackOverflow post for more details.

Let us know if this works for you.

Regards,
Sahil Behl

Thank you for that. That is getting me a bit farther but now when I run “expo run:ios”, I get:

❌  (node_modules/react-native-pdftron/ios/RNPdftron.m:4:9)

  2 | #import <React/RCTLog.h>
  3 | 
> 4 | #import <PDFNet/PDFNet.h>
    |         ^ 'PDFNet/PDFNet.h' file not found
  5 | 
  6 | @implementation RNPdftron
  7 | 

    Run script build phase '[CP-User] Generate app.config for prebuilt Constants.manifest' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'EXConstants' from project 'Pods')
    Run script build phase 'Start Packager' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'ReactNativeSample' from project 'ReactNativeSample')
    Run script build phase 'Bundle React Native code and images' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'ReactNativeSample' from project 'ReactNativeSample')

› 1 error(s), and 3 warning(s)

CommandError: Failed to build iOS project. "xcodebuild" exited with error code 65.

Hi Ken,

While we will look into the issue you are facing. Can you update the podfile to use this podspec:

pod 'PDFNet', podspec: 'https://www.pdftron.com/downloads/ios/cocoapods/xcframeworks/pdfnet/latest.podspec'

Let us know if this works for you.

Best Regards,
Sahil.