signalapp / libsignal

Home to the Signal Protocol as well as other cryptographic primitives which make Signal possible.
GNU Affero General Public License v3.0
3.62k stars 420 forks source link

The following build commands failed: PhaseScriptExecution [CP-User]\ Download\ libsignal-ffi\ if\ not\ in\ cache #574

Closed amirvatani closed 6 months ago

amirvatani commented 6 months ago

**when i try to use a path-based dependency to treat LibSignalClient as a development pod.

this command finished successfuly :

CARGO_BUILD_TARGET=x86_64-apple-ios swift/build_ffi.sh --release

but in this command. :

pod lib lint \
  --platforms=ios \
  --include-podspecs=../SignalCoreKit/SignalCoreKit.podspec \
  --skip-import-validation \
  --verbose

i get this error :**

Copy /X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Products/Debug-iphonesimulator/LibSignalClient_Unit_Tests.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo /X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/LibSignalClient-Unit-Tests.build/Objects-normal/arm64/LibSignalClient_Unit_Tests.swiftsourceinfo (in target 'LibSignalClient-Unit-Tests' from project 'Pods')
        cd /var/folders/t8/9ypzgkj93l5fnl31960krc1h0000gn/T/CocoaPods-Lint-20240508-12519-6eudz8-LibSignalClient/Pods
        builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -resolve-src-symlinks -rename /X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/LibSignalClient-Unit-Tests.build/Objects-normal/arm64/LibSignalClient_Unit_Tests.swiftsourceinfo /X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Products/Debug-iphonesimulator/LibSignalClient_Unit_Tests.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo

    SwiftDriverJobDiscovery normal arm64 Compiling TestCaseBase.swift, TestUtils.swift (in target 'LibSignalClient-Unit-Tests' from project 'Pods')

    /var/folders/t8/9ypzgkj93l5fnl31960krc1h0000gn/T/CocoaPods-Lint-20240508-12519-6eudz8-LibSignalClient/Pods/Pods.xcodeproj: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 17.4.99. (in target 'CocoaLumberjack' from project 'Pods')
    warning: Run script build phase '[CP-User] Download and cache libsignal-ffi' 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 'LibSignalClient' from project 'Pods')

    Testing failed:
    Test session results, code coverage, and logs:
        /X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Logs/Test/Run-LibSignalClient-Unit-Tests-2024.05.08_02-28-06-+0330.xcresult
        No such file or directory: '/X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Intermediates.noindex/Pods.build/libsignal_ffi/target/aarch64-apple-ios-sim/release/libsignal_ffi.a'

        Testing cancelled because the build failed.

    ** TEST FAILED **

    The following build commands failed:
        Ld /X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Products/Debug-iphonesimulator/LibSignalClient/LibSignalClient.framework/LibSignalClient normal (in target 'LibSignalClient' from project 'Pods')
    (1 failure)
 -> LibSignalClient (0.44.0)
    - ERROR | xcodebuild: Returned an unsuccessful exit code.
    - NOTE  | xcodebuild:  note: Using codesigning identity override: -
    - NOTE  | xcodebuild:  note: Building targets in dependency order
    - NOTE  | [iOS] xcodebuild:  note: Target dependency graph (3 targets)
    - NOTE  | xcodebuild:  note: Metadata extraction skipped. No AppIntents.framework dependency found. (in target 'SignalCoreKit' from project 'Pods')
    - WARN  | xcodebuild:  /X/Desktop/libsignal/swift/Sources/LibSignalClient/Logging.m:44:18: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
    - WARN  | xcodebuild:  /X/Desktop/libsignal/swift/Sources/LibSignalClient/Logging.m:49:53: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]
    - NOTE  | xcodebuild:  clang: error: no such file or directory: '/X/Library/Developer/Xcode/DerivedData/App-gdkmgucnghnbhwgolhgdpkrgdtsh/Build/Intermediates.noindex/Pods.build/libsignal_ffi/target/aarch64-apple-ios-sim/release/libsignal_ffi.a'
    - NOTE  | xcodebuild:  warning: Run script build phase '[CP-User] Download and cache libsignal-ffi' 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 'LibSignalClient' from project 'Pods')
    - NOTE  | xcodebuild:  Pods.xcodeproj: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is 12.0 to 17.4.99. (in target 'CocoaLumberjack' from project 'Pods')
    - NOTE  | [iOS] xcodebuild:  note: Target dependency graph (4 targets)

[!] LibSignalClient did not pass validation, due to 1 error and 2 warnings.
You can use the `--no-clean` option to inspect any issue.

and when i try to use libsignal as CocoaPod in my react native ( Expo ) ios using, again it fails at The following build commands : PhaseScriptExecution [CP-User]\ Download\ libsignal-ffi\ if\ not\ in\ cache

logs :

CommandError: Failed to build iOS project. "xcodebuild" exited with error code 65.
To view more error logs, try building the app with Xcode directly, by opening /Users/amirhossein/Desktop/expo-libsignal-client/example/ios/expolibsignalclientexample.xcworkspace.

Command line invocation:
    /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -workspace /Users/amirhossein/Desktop/expo-libsignal-client/example/ios/expolibsignalclientexample.xcworkspace -configuration Debug -scheme expolibsignalclientexample -destination id=D38D8572-3E98-465F-8554-9146F04EC375

User defaults from command line:
    IDEPackageSupportUseBuiltinSCM = YES

Prepare packages

ComputeTargetDependencyGraph
note: Building targets in dependency order
note: Target dependency graph (65 targets)
    Target 'expolibsignalclientexample' in project 'expolibsignalclientexample'
        ➜ Implicit dependency on target 'Pods-expolibsignalclientexample' in project 'Pods' via file 'Pods_expolibsignalclientexample.framework' in build phase 'Link Binary'
        ➜ Implicit dependency on target 'CocoaLumberjack' in project 'Pods' via options '-framework CocoaLumberjack' in build setting 'OTHER_LDFLAGS'

--- xcodebuild: WARNING: Using the first of multiple matching destinations:
{ platform:iOS Simulator, id:D38D8572-3E98-465F-8554-9146F04EC375, OS:17.4, name:iPhone SE (3rd generation) }
{ platform:iOS Simulator, id:D38D8572-3E98-465F-8554-9146F04EC375, OS:17.4, name:iPhone SE (3rd generation) }
** BUILD FAILED **

The following build commands failed:
    PhaseScriptExecution [CP-User]\ Download\ libsignal-ffi\ if\ not\ in\ cache /Users/amirhossein/Library/Developer/Xcode/DerivedData/expolibsignalclientexample-bzodidldhyimvpevehgkkklhqvsr/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/LibSignalClient.build/Script-46EB2E0001EEC0.sh (in target 'LibSignalClient' from project 'Pods')
(1 failure)
Build logs written to /Users/amirhossein/Desktop/expo-libsignal-client/example/.expo/xcodebuild.log

and it is my pod file :

require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")

require 'json'
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}

ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']

platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'
install! 'cocoapods',
  :deterministic_uuids => false

prepare_react_native_project!
flipper_config = FlipperConfiguration.disabled
if ENV['NO_FLIPPER'] == '1' then
  flipper_config = FlipperConfiguration.disabled
elsif podfile_properties.key?('ios.flipper') then
  if podfile_properties['ios.flipper'] == 'true' then
    flipper_config = FlipperConfiguration.enabled(["Debug", "Release"])
  elsif podfile_properties['ios.flipper'] != 'false' then
    flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] })
  end
end

target 'expolibsignalclientexample' do
  pod 'LibSignalClient', :git => 'https://github.com/signalapp/libsignal.git'
  pod 'SignalCoreKit', git: 'https://github.com/signalapp/SignalCoreKit.git' , :modular_headers => true 
  ENV['LIBSIGNAL_FFI_PREBUILD_CHECKSUM'] = 'efa1ba4cef14c220714fbc657bd104b5c01df0b9e15a33836c112278150460d6'

  use_expo_modules!
  config = use_native_modules!

  use_frameworks! 

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/..",
    # Note that if you have use_frameworks! enabled, Flipper will not work if enabled
    :flipper_configuration => flipper_config
  )

  post_install do |installer|
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false
    )

    installer.target_installation_results.pod_target_installation_results
      .each do |pod_name, target_installation_result|
      target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
        resource_bundle_target.build_configurations.each do |config|
          config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
        end
      end
    end
  end

  post_integrate do |installer|
    begin
      expo_patch_react_imports!(installer)
    rescue => e
      Pod::UI.warn e
    end
  end
end

full XCode Build logs are here

jrose-signal commented 6 months ago

The pod lib lint error is because pod lib lint expects both simulator targets to be present, even though it'll only test one of them. For the xcodebuild failure, you'd need to share the full error logs for that build phase for us to make any guesses about what went wrong.

amirvatani commented 6 months ago

@jrose-signal i just edited the issue , you can find the full logs file at the end of the issue

matinrn commented 6 months ago

same here

amirvatani commented 6 months ago
report

i add ENV['LIBSIGNAL_FFI_PREBUILD_ARCHIVE'] = 'libsignal-client-ios-build-v0.46.0.tar.gz' to my podFile ,

and also build manually using (CARGO_BUILD_TARGET=aarch64-apple-ios-sim swift/build_ffi.sh --release)

now all errors fixed in all tests pass successfully,

now i get the following error when trying to run ios from terminal ( errors generated in xcode attached in the image )

› Copying   ios/expolibsignalclientexample/Supporting/Expo.plist ➜ ./Expo.plist
› Compiling expolibsignalclientexample » SplashScreen.storyboard
› Preparing expolibsignalclientexample » Info.plist
› Compiling expolibsignalclientexample » main.m
› Compiling expolibsignalclientexample » expolibsignalclientexample_vers.c
› Compiling expolibsignalclientexample » AppDelegate.mm
› Linking   expolibsignalclientexample » expolibsignalclientexample
⚠️  ld: ignoring duplicate libraries: '-lc++'
⚠️  ld: Could not find or use auto-linked library 'signal_ffi': library 'signal_ffi' not found
⚠️  ld: Could not find or use auto-linked framework 'CoreAudioTypes': framework 'CoreAudioTypes' not found
❌  Undefined symbols for architecture arm64
┌─ Symbol: _signal_address_clone
└─ Referenced from: static LibSignalClient.ProtocolAddress.cloneNativeHandle(_: inout Swift.OpaquePointer?, currentHandle: Swift.OpaquePointer?) -> Swift.OpaquePointer? in LibSignalClient[5](Address.o)

❌  ld: symbol(s) not found for architecture arm64

❌  clang: error: linker command failed with exit code 1 (use -v to see invocation)

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

CommandError: Failed to build iOS project. "xcodebuild" exited with error code 65.
xcode error
jrose-signal commented 6 months ago

ld: Could not find or use auto-linked library 'signal_ffi': library 'signal_ffi' not found

Now that you're building for a real device, you have to use the real device's target triple for CARGO_BUILD_TARGET when you build_ffi.sh. x86 simulator, arm64 simulator, and arm64 device are all separate.

amirvatani commented 6 months ago

@jrose-signal i get the above errors ( in xcode image )when i run using pod in xcode , but when i want to build it manually using :

CARGO_BUILD_TARGET=x86_64-apple-ios swift/build_ffi.sh --release --generate-ffi

i got these errors ( available in the url ) : Logs

my toolchain list

` amirhossein@Amirhosseins-MacBook-Pro libsignal % rustup toolchain list

`

my target list

` amirhossein@Amirhosseins-MacBook-Pro libsignal % rustup target list

`

jrose-signal commented 6 months ago

Ah, you need a newer version of cbindgen too. Sorry the instructions for that are incorrect! The latest version should work instead of the ^16.0 that's listed.

amirvatani commented 6 months ago

@jrose-signal now it ends with lots of warning ( log ), now i get xcode error ( avaiable in above image ) using both of these :

jrose-signal commented 6 months ago

As noted, you need to build all three targets for libsignal_ffi.a if you are using LibSignalClient as a path-based dependency.

This is ultimately not a support channel. Please take this to https://community.signalusers.org.