Xcode sem Storyboard e ARC


116

Baixei o novo xcode-5 e comecei a usá-lo.

Podemos criar o aplicativo diretamente, incluindo storyboard e ARC, não estamos pedindo opções como as versões anteriores.

Então, minha pergunta é como podemos usar o xcode5 sem ARC e storyboard. temos que remover manualmente o arquivo de storyboard? ou existe alguma outra opção.


3
Ninguém pode realmente responder isso, mas acho que a Apple fez isso porque ambos os Storyboards e ARC são o futuro no desenvolvimento de aplicativos com Xcode ou em Objective-C. Como o Xcode 5 ainda é uma versão beta, pode ser que eles adicionem suporte para ele ainda este ano, mas acho que isso não vai acontecer.
TEM

6
Remova o arquivo de storyboard manualmente e remova o -fobjc-arcsinalizador do compilador nas configurações do projeto.

19
Perguntas sobre ferramentas usadas principalmente por programadores são muito focadas no tópico , desde que não peçam o 'melhor' de algo ou recomendações de 'compras'. Eu reabri isso de acordo.
Tim Post

1
Mas este não é o lugar adequado para isso. Entenda isso.
MZimmerman6

3
a única coisa que faz isso sob o NDA são as palavras "Xcode 5" parte. qualquer coisa realmente descrita pode ser feita em versões anteriores do Xcode, portanto, tecnicamente, este tópico é livre para discutir.
AtomRiot de

Respostas:


150

Crie um projeto com um aplicativo vazio e adicione qualquer viewcontroller (adicionei TestViewController aqui)

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
 {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   // Override point for customization after application launch.
   TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
   UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
   self.window.rootViewController = nav;
   [self.window makeKeyAndVisible];
   return YES;
 }

ETAPAS PARA REMOVER ARCO

1) Na configuração de construção, defina a contagem automática de referência para NÃO .

//////////////////////////////////////////////////////// /////////////////////////FIM//////////////////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// /////////////////////////

Se você já criou o aplicativo com storyboard e ARC ,

ETAPAS PARA REMOVER PLACA DE HISTÓRIA

1) Remova o arquivo Main.storyboard do seu projeto.

2) Adicione novos arquivos com xib para o seu controlador, se ele não for adicionado aos fontes compilados nas fases de construção, adicione-os manualmente.

3) Remova o nome da base do arquivo do storyboard principal do plist .

4) Altere o arquivo appdelegate didFinishLaunchingWithOptions e adicione:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

[self.window makeKeyAndVisible];

Assim como :

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

     // Override point for customization after application launch.

     TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
     UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
     self.window.rootViewController = nav;
     [self.window makeKeyAndVisible];

     return YES;
}


Agora, no exemplo acima, você deve gerenciar o gerenciamento de memória manualmente como,

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

 [test release]; 

ETAPAS PARA REMOVER ARCO

1) Na configuração de construção, defina a contagem automática de referência para NÃO .


7
Não existe mais uma opção de "projeto vazio"? Não acho que vou começar a usar storyboards.
Sulthan de

1
Certifique-se de alterar a configuração de "Interface principal" de seu destino para o novo <View Controller> raiz.
Paul Brady

você está certo @Sulthan que podemos fazer isso por projeto vazio, mas essas são as mudanças se eu já criei um aplicativo baseado em visão. (temos que remover algum código de storyboard manualmente do arquivo appDelegate), enquanto no aplicativo vazio, temos que adicionar novo código nele :)
PJR

Encontrei um script que adicionará a opção de remover storyboards de volta: stackoverflow.com/a/19792955/329928
Chris Leyva

por que o UINavigationController * nav não foi liberado automaticamente? e devemos usar _window em [UIWindow alloc]?
hariszaman

44

Em vez de excluir o arquivo de storyboard, você pode criar um novo projeto com o modelo de aplicativo vazio. Para que você possa evitar a criação de arquivo de storyboard.

Use as seguintes etapas para omitir o storyboard: insira a descrição da imagem aqui

  1. Crie um novo projeto com o modelo de aplicativo vazio.
  2. Adicionar um novo viewController (Exemplo: LoginViewController)
  3. Alterar o didFinishLaunchingWithOptionsno AppDelegate.marquivo conforme especificado abaixo.

Mudar para:

#import "LoginViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Remover ARC: Vá para Build Setting -> Objective-C Automatic Reference Counting -> NO


1
Uau! Funciona como um encanto e muito mais simples do que a resposta aceita. Eu só tinha que ter certeza de mudar todas as referências para LoginViewControllerpara corresponder ao nome do meu próprio controlador.
JohnK

11

criar novo projeto

! [Criar novo projeto]

remova o nome da base do arquivo do storyboard principal nas informações

// remove o nome da base do arquivo do storyboard principal nas informações

Adicionar este código no appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Em seguida, remova automaticamente seu storyboard.

Por favor, tente isto ... executado com sucesso. obrigado


5

Atalho: eu prefiro

Crie o projeto sem Storyboard e ARC no xcode4 e, em seguida, abra esse projeto no xcode5.


1
Manter uma versão mais antiga do Xcode apenas para isso não vale a pena. Prefiro criar um novo projeto, me livrar das coisas do Storyboard, adicionar instanciação UIWindow em appDelegate e salvá-lo como um projeto modelo para mais tarde.
kervich

3

O Xcode 4 tinha a caixa de seleção "Usar Storyboards" quando você criou um novo projeto. É possível pegar os antigos modelos de aplicativo Xcode 4 (arquivos XML) e convertê-los em Xcode 5. Dessa forma, você obtém os modelos antigos de volta que permitem escolher se deseja storyboards ou não.


Eu escrevi um script que faz todo esse trabalho para você: https://github.com/jfahrenkrug/Xcode4templates


Depois de executar o script, você terá uma seção "Xcode 4" na tela "Novo projeto":

insira a descrição da imagem aqui

E então - Ai de mim! - você recebe suas escolhas amadas de volta:

insira a descrição da imagem aqui

Você precisará de uma cópia do pacote Xcode 4 .app de http://developer.apple.com/ios para usar este script.


1
No entanto, esses modelos são antigos e não aproveitam todas as novas alterações disponíveis, como -registerClass: forCellReuseIdentifier :.
Mahboudz

@mahboudz Isso é verdade. Você precisa ajustar isso se essa funcionalidade for importante para você. É claro que espero que a Apple traga de volta a opção de desativar Storyboards em uma versão futura do Xcode.
Johannes Fahrenkrug

1
Acredito que sim. Como você, eu uso o Storyboard em aplicativos menores, principalmente devido ao rápido desenvolvimento do TableView, mas em aplicativos maiores, o Storyboard é um grande problema. De rolar ao redor, para lembrar IDs de segue (eles têm que adicionar uma maneira de utilizar #defines ou const NSString * entre Storyboards e arquivos de origem), para fazer a resolução de conflitos git e mais, Storyboards simplesmente não são tudo e acabar com tudo.
mahboudz de

aquelas setas V / A embora.
John Riselvato

1
@JohnRiselvato Você está certo :) As flechas desagradáveis ​​sumiram agora :)
Johannes Fahrenkrug

0

Tenho uma dica:

  1. O Primeiro: Eu crio meu projeto pelo XCode 4.6 (porque esta versão é a mais próxima do XCode 5).
    • Claro que com o XCode 4.6, você pode escolher usar ou não o ARC, Storyboard.
  2. O Segundo: Depois disso irei abrir meu Projeto com o XCode 5. => Acho que o Xcode 5 vai entender que o projeto está usando nonARC, e claro, não tem Storyboard.

Espero que seu projeto funcione! : D

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.