NativeScript / NativeScript/nativescript-cli

Can the Podfile generation better handle logical blocks

Aberta
#5,805 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

feature-pending-triage
Linguagem predominante
JavaScript
Estrelas
1.1k
Forks
204
Merge médio
1d 9h
PRs com merge (30d)
8

Descrição

Is your feature request related to a problem? Please describe.

I wish I could apply variable logic when defining iOS deployment target in the application Podfile.

To set the IPHONEOS_DEPLOYMENT_TARGET we must define the platform version in two separate files to ensure both the target application and all dependencies meet our minimum desired version.

  1. App_Resources/iOS/build.xcconfig
    IPHONEOS_DEPLOYMENT_TARGET=16
  2. App_Resources/iOS/Podfile
    platform :ios, '16.0'

As suggested in the troubleshooting documentation, to ensure that all dependencies are also configured to this target it is suggested that we do the following... which works fine.

platform :ios, '13.0'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
    end
  end
end

*See https://docs.nativescript.org/troubleshooting#cocoapods-could-not-find-compatible-versions-for-pod-higher-minimum-deployment-target

This makes 3 places where I need to update the target version for iOS.

Inspired by this answer, if I try to apply any kind of logic in the application Podfile, it is either stripped by the CocoaPodsPlatformManager or ignored altogether.

Doing this:

app_ios_deployment_target = Gem::Version.new('16.0')
platform :ios, app_ios_deployment_target.version

Results in this:

platform :ios, 

It looks like the Regex is trying to match a platform within quotes('") only.
^\\s*?#\\s*?(platform\\b\\s*?\\:\\s*?ios\\b(?:,\\s*?['"](.+)['"])?)

Ruby will also complain the variable app_ios_deployment_target does not exist, which is true because only the line matched by the Regex above is hoisted above any post_install hooks and all other code blocks are lost.

Describe the solution you'd like

It would be great if CocoaPodsPlatformManager.selectPlatformDataFromProjectPodfile could be expanded to match other expressions.

It would also be great if all other lines that are not the platform definition and are outside of hooks are hoisted first, so that variables could be used.

This could mean that we can have one source of truth when defining the iOS target. Which could be in App_Resources/iOS/build.xcconfig and the read from the Podfile, or better yet an environment variable.

Describe alternatives you've considered

No response

Anything else?

No response

Please accept these terms

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece por lib/services/cocoapods-platform-manager.ts, especialmente por selectPlatformDataFromProjectPodfile e sua expressão de correspondência de plataforma. Rastreie como as linhas do Podfile são elevadas e como expressões Ruby não colocadas entre aspas e código fora de hooks são tratados. O trabalho estará concluído quando o deployment target baseado em variável solicitado e as linhas de pré-requisito continuarem utilizáveis sem serem removidos.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
ruby, typescript
Domínio
cli, mobile
Tipo de issue
Funcionalidade
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.