Xcode без раскадровки и ARC


116

Я загрузил новый xcode-5 и только начал его использовать.

Мы можем создать приложение напрямую, включая раскадровку и ARC, оно не требует опции, как в более ранних версиях.

Итак, мой вопрос: как мы можем использовать xcode5 без ARC и раскадровки. нам нужно вручную удалить файл раскадровки? или есть другой вариант.


3
Никто не может ответить на этот вопрос, но я думаю, что Apple сделала это, потому что и раскадровки, и ARC - это будущее в разработке приложений с помощью Xcode или Objective-C. Поскольку Xcode 5 все еще находится в стадии бета-тестирования, возможно, они добавят его поддержку позже в этом году, но я думаю, что этого не произойдет.
БЫЛ

6
Удалите файл раскадровки вручную и снимите -fobjc-arcфлаг компилятора в настройках проекта.

19
Вопросы об инструментах, которые в основном используются программистами , очень сильно относятся к теме , при условии, что они не спрашивают «лучшее» из чего-либо или рекомендаций по «покупкам». Соответственно, я снова открыл это.
Тим Пост

1
Но это не место для этого. Поймите это.
MZimmerman6

3
единственное, что делает это в рамках соглашения о неразглашении - это слова «Xcode 5». все, что действительно описано, можно сделать в предыдущих версиях Xcode, поэтому технически эту тему можно обсуждать бесплатно.
AtomRiot

Ответы:


150

Создайте проект с пустым приложением и добавьте любой контроллер представления (здесь я добавил TestViewController)

   - (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;
 }

ЭТАПЫ ДЛЯ УДАЛЕНИЯ ДУГИ

1) В настройках сборки установите для автоматического подсчета ссылок значение NO .

////////////////////////////////////////////////// /////////////////////////КОНЕЦ//////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

Если у вас есть уже созданное приложение с раскадровкой и ARC, тогда

ШАГИ ДЛЯ УДАЛЕНИЯ ДОСКИ ИСТОРИИ

1) Удалите файл Main.storyboard из своего проекта.

2) Добавьте новые файлы с xib для вашего контроллера, если он не добавлен в скомпилированные источники на этапах сборки, добавьте их вручную.

3) Удалите базовое имя основного файла раскадровки из списка .

4) Измените файл appdelegate didFinishLaunchingWithOptions и добавьте:

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

[self.window makeKeyAndVisible];

как :

  - (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;
}


Теперь, в приведенном выше примере, вам нужно вручную управлять памятью, например,

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

 [test release]; 

ЭТАПЫ ДЛЯ УДАЛЕНИЯ ДУГИ

1) В настройках сборки установите для автоматического подсчета ссылок значение NO .


7
Больше нет варианта «пустой проект»? Я не думаю, что каждый раз буду использовать раскадровки.
Sulthan

1
Обязательно измените настройку «Main interface» вашего Target на новый корневой <View Controller>.
Пол Брэди

вы правы, @Sulthan, мы можем сделать это с помощью пустого проекта, но это изменения, если я уже создал приложение на основе просмотра. (нам нужно вручную удалить код раскадровки из файла appDelegate), а в пустом приложении мы должны добавить в него новый код :)
PJR

Я наткнулся на сценарий, который добавит возможность удаления раскадровок обратно: stackoverflow.com/a/19792955/329928
Крис Лейва

почему UINavigationController * nav не запускается автоматически? и мы должны использовать _window в [UIWindow alloc]?
hariszaman

44

Вместо удаления файла раскадровки вы можете создать новый проект с шаблоном пустого приложения. Так что вы можете избежать создания файла раскадровки.

Чтобы пропустить раскадровку, выполните следующие действия: введите описание изображения здесь

  1. Создайте новый проект с шаблоном пустого приложения.
  2. Добавить новый ViewController (пример: LoginViewController)
  3. Изменение didFinishLaunchingWithOptionsв AppDelegate.mфайле , как указано ниже.

Изменить на:

#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;
}

Удалите ARC: перейдите в Настройка сборки -> Автоматический подсчет ссылок Objective-C -> НЕТ


1
Вот Это Да! Работает как шарм и намного проще, чем принятый ответ. Мне просто нужно было обязательно изменить все ссылки на имя LoginViewControllerмоего собственного контроллера.
JohnK 08

11

создать новый проект

! [Создать новый проект]

удалить основное имя файла раскадровки в информации

// удаляем базовое имя файла основной раскадровки в Info

Добавить этот код в 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;
}

Затем автоматически удалите раскадровку.

Пожалуйста, попробуйте это ... успешно выполнено. Спасибо


5

ShortCut: я предпочитаю

Создайте проект без раскадровки и ARC в xcode4, а затем откройте этот проект в xcode5.


1
Хранить старую версию Xcode только для этого не стоит. Я бы предпочел создать новый проект, избавиться от материала Storyboard, добавить экземпляр UIWindow в appDelegate и сохранить его как проект-шаблон на будущее.
Кервич

3

В Xcode 4 был флажок «Использовать раскадровки» при создании нового проекта. Можно взять старые шаблоны приложений Xcode 4 (файлы XML) и преобразовать их в Xcode 5. Таким образом вы получите обратно старые шаблоны, которые позволят вам выбрать, хотите ли вы раскадровки или нет.


Я написал сценарий, который сделает все, что вам нужно: https://github.com/jfahrenkrug/Xcode4templates


После запуска скрипта на экране «Новый проект» появится раздел «Xcode 4»:

введите описание изображения здесь

А потом - Увы! - вы получите обратно свой любимый выбор:

введите описание изображения здесь

Для использования этого скрипта вам понадобится копия пакета Xcode 4 .app с http://developer.apple.com/ios .


1
Однако эти шаблоны устарели и не используют все новые доступные изменения, такие как -registerClass: forCellReuseIdentifier :.
mahboudz

@mahboudz Это правда. Вам нужно настроить это, если эта функция важна для вас. Конечно, я надеюсь, что Apple вернет возможность отказаться от раскадровки в будущей версии Xcode.
Йоханнес Фаренкруг

1
Я надеюсь, что это так. Как и вы, я использую Storyboard в небольших приложениях, в основном из-за быстрой разработки TableView, но в более крупных приложениях Storyboard является серьезной проблемой. От прокрутки до запоминания идентификаторов перехода (они должны добавить способ использования #defines или const NSString * между раскадровками и исходными файлами) до разрешения конфликтов git и многого другого, раскадровки - это еще не все и закончить все.
mahboudz

эти стрелки V / A хотя.
John Riselvato

1
@JohnRiselvato Вы правы :) Противные стрелки исчезли :)
Johannes Fahrenkrug

0

У меня есть совет:

  1. Первое: я создаю свой проект с помощью XCode 4.6 (потому что эта версия ближе всего к XCode 5).
    • Конечно, с XCode 4.6 вы можете выбрать использовать или не использовать ARC, Storyboard.
  2. Второй: после этого я открою свой проект с помощью XCode 5. => Я думаю, что Xcode 5 поймет, что проект использует nonARC и, конечно же, не имеет раскадровки.

Надеюсь, ваш проект заработает! : D

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.