Using NativeScript how can I run a project under iOS? I get these messages when I run tns run iOS --bundle
Webpack compilation complete. Watching for file changes.
Webpack build done!
Copying template files...
Platform ios successfully added. v4.2.0
Executing before-shouldPrepare hook from /Users/Zian/Documents/Projects/NativeScript/Hybrid/hooks/before-shouldPrepare/nativescript-dev-webpack.js
Preparing project...
Executing before-prepareJSApp hook from /Users/Zian/Documents/Projects/NativeScript/Hybrid/hooks/before-prepareJSApp/nativescript-dev-webpack.js
Installing pods...
Analyzing dependencies
Downloading dependencies
Installing Socket.IO-Client-Swift (11.1.3)
Installing StarscreamSocketIO (8.0.7)
Installing Toaster (2.0.4)
[!] Unable to determine Swift version for the following pods:
- `Socket.IO-Client-Swift` does not specify a Swift version and none of the targets (`Hybrid`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.
- `StarscreamSocketIO` does not specify a Swift version and none of the targets (`Hybrid`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.
- `Toaster` does not specify a Swift version and none of the targets (`Hybrid`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.
Unable to apply changes on device: 21FFE2BB-EB0D-48E3-A7AD-28CA08DD21E5. Error is: Command pod failed with exit code 1 Error output:
[!] Automatically assigning platform `ios` with version `8.0` on target `Hybrid` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
Can someone help me out?
Just had these same errors and found out downgrading from cocoapods 1.6.0 to 1.5.3 fixed it for me.
sudo gem uninstall cocoapods
sudo gem install cocoapods -v 1.5.3
The problem here seems to be Toaster (2.0.4), which appears to have been developed for Swift 3.
I did this in order to resolve the issue:
go to the main folder for the nativescript project
In your bash shell, do:
% export SWIFT_VERSION=3
Then do your usual:
% tns build ios --bundle
Then open the project in Xcode:
% cd platforms/ios
% Open *.workspace
You'll get a warning about a build error in the pods project and may need to set your development team, but it should work.
The problem is with Cocoapods 1.6.x which have different behavior when it comes up to SWIFT_VERSION. Previously it was possible to set the SWIFT_VERSION in post_install hook of the Podfile, but now the pod install
command fails before even getting to post_install.
The best solution is to use Cocoapod which already has SWIFT_VERSION set, i.e. in case you face the error, try to contact the Pod author.
Meanwhile, as a workaround, you can add a pre_install
script in your <path to App_Resources/iOS/Podfile
file with the following content:
pre_install do |installer|
installer.analysis_result.specifications.each do |s|
if s.name == 'Socket.IO-Client-Swift' || s.name == 'Starscream' || s.name == 'StarscreamSocketIO' || s.name == 'Toaster'
s.swift_version = '4.2'
end
end
end
For each of the Pods you can set different Swift version based on their requirements.
I have it fixed with @K Brown's answer.
Was having these errors when running tns run ios --bundle
for Socket.IO-Client-Swift
, StarscreamSocketIO
and Toaster
when both v1.6.0 and v1.5.3 of Cocoapods installed:
- `<package name>` does not specify a Swift version and none of the targets
(`<project name>`) integrating it have the `SWIFT_VERSION` attribute set.
Please contact the author or set the `SWIFT_VERSION` attribute in at least one
of the targets that integrate this pod.
Below are the commands used:
sudo gem uninstall cocoapods
sudo gem install cocoapods -v 1.5.3
rm -Rf platforms
tns install
tns run ios --bundle
Here is the real fix ! You can't stick with Cocoapods 1.5.3 forever...
Downgrading to 1.5.3
isn't a proper workaround and will not be sustainable in the future. In fact, this error is due to a new behavior introduced in Cocoapods 1.6.0
version, which force developers to set a Swift version to their projects. The goal is in fact to make library developers specify a Swift version in their podspec
, so that library users don't have to do this manually (thanks to post_install
scripts for example). You can see my discussion about this with a Cocoapods maintainer here. I do agree that this behavior is a bit misleading, as we try to set the Swift version in post_install
script but an error is returned before…
In fact, as I have been told by the maintainer, the correct fix to this issue is to set a Swift version at project level (and therefore not at Pod level). To do this, just add a new User Defined Setting
in Build Settings
, with key SWIFT_VERSION
and value 4.0
(for example, as whatever value should work here if you also set the version at Pod level with post_install
script).
Long story short, the fix is to add this key/value :
Note that as you're using NativeScript, you may want to set the Swift version by running command export SWIFT_VERSION=4
in your project folder, before building.
来源:https://stackoverflow.com/questions/53009550/swift-version-nativescript