Что такое SpringBoard

Что такое SpringBoard Ipad

Что такое респринг iphone или ipad?

Респринг — (Restarting Springboard), по сути, это перезагрузка пользовательского интерфейса, то есть, рабочего стола iOS, именуемого также спрингбордом (Springboard — системное приложение, отвечающее за главный экран iOS). При этом не выгружаются приложения из меню мультизадачности и не требуется ввод пароля.

Видеообзор:

Что это за приложение

  • В 2021 году вышла седьмая версия операционной системы iOS. Вместе с рядом нововведений изменения претерпело и приложение под названием SpringBoard.
  • Теперь с любого рабочего стола пользователю стал доступен Spotlight, а у папок появились свои страницы (их максимальное число дошло до 15-ти). Усовершенствованию и переработке также подверглись все иконки и док-выход.
  • Владельцы смартфонов Apple чаще всего употребляют данное понятие аналогично рабочему столу операционной системы Windows. По сути, это особое приложение, которое отвечает за главный экран iOS.

    Именно с рабочего стола SpringBoard открываются все программы, которые были скачаны и инсталлированы нами.

  • Это приложение можно найти в системной библиотеке (System > Library > Core Services). Оно имеет формат *app. Приложение отвечает за связь между устройством и его владельцем, а также следит за экраном и всеми производимыми манипуляциями.

    К примеру, если мы наклоняем наш смартфон, акселерометр реагирует соответствующим образом и «сообщает» обо всём сервису SpringBoard.

  • Если пользователь существенно меняет настройки своего аппарата, ему рекомендуется перезагружать приложение.

    Это необходимо для того, чтобы осуществлённые изменения вступили в силу (аналогично тому, как ОС Windows на ПК нуждается в перезагрузке после установки важной программы).

  • Все те задачи, которые были запущены в рамках приложения, также нужно перезапустить.

Пишем что-то полезное

В комплекте к theos-у мы получаем хедеры системных фреймворков. В нашем проекте они лежат в

theos/include

. Если же не лежат, не забываем сделать так:

cd theos
git submodule init
git submodule update

Там находим папку SpringBoard, а в ней — кучу хедеров. Что ж, пройдёмся по именам классов. Приметим интересный класс SBAwayView, который как раз и является основной вьюшкой экрана блокировки. Что ж, будем ставить хуки именно в него. Для начала надо бы поймать момент его создания:

#import <SpringBoard/SBAwayView.h>
#import <UIKit/UIKit.h>

%hook SBAwayView

-(id)initWithFrame:(CGRect)frame
{
	id result = %orig;
	if (result)
	{
		// here goes the code...
	}
	return result;
}

%end

Можем поставить %log и убедиться после сборки-установки, что этот метод действительно вызывается. Теперь мы можем добавлять новые вьюшки! Только куда? Давайте будем их добавлять на фоновую картинку. Находим ivar

Читайте также:  наклейка пленки на айпад на АлиЭкспресс — купить онлайн по выгодной цене

UIImageView *_backgroundView

у класса

SBSlidingAlertDisplay

, от которого наследуется

SBAwayView

, там же находим метод

-(CGRect)middleFrame;

. Но как нам получить значение ivar-а? Погуглим. Найдём функцию MSHookIvar, которая всё и сделает:

#import <SpringBoard/SBAwayView.h>
#import <UIKit/UIKit.h>
#import <substrate.h>

%hook SBAwayView

-(id)initWithFrame:(CGRect)frame
{
	id result = %orig;
	if (result)
	{
		CGRect labelRect = [self middleFrame];
		labelRect.origin.y = labelRect.origin.y   20.f;
		labelRect.size.height = 50.f;
		UILabel *habrLabel = [[[UILabel alloc] initWithFrame:labelRect] autorelease];
		habrLabel.text = @"Hello, Habr!";
		habrLabel.textColor = [UIColor colorWithRed:155.f/255.f green:182.f/255.f blue:206.f/255.f alpha:1.f];
		habrLabel.opaque = NO; 
		habrLabel.textAlignment = UITextAlignmentCenter;
		habrLabel.font = [UIFont boldSystemFontOfSize:36];
		habrLabel.backgroundColor = [UIColor clearColor];
		UIImageView *backgroundView = MSHookIvar<UIImageView *>(self, "_backgroundView");
		[backgroundView addSubview:habrLabel];
	}
	return result;
}

%end


Запускаем и наслаждаемся зрелищем!

Что такое SpringBoard

Теперь усложним задачу. Будем загружать картинку! В теории всё просто: вместо UILabel создаём UIImageView. А откуда картинку брать?

Картинку надо бы положить в бандл SpringBoard.app, а лучше, если картинка туда сама скопируется во время установки пакета. Для этого мы реорганизуем структуру проекта: создадим папку Layout, в ней — папку DEBIAN, куда переместим уже имеющийся файл control, рядом с папкой DEBIAN сделаем System/Library/CoreServices/SpringBoard.app, куда и поместим нашу картинку:

%orig и %new

Что ж, метод мы переопределили, ну а как вызвать оригинальный-то? Да тоже очень просто! Для этого есть макрос %orig. Будучи вызванным без параметров, этот макрос перенаправляет функции-оригиналу те же параметры, что и пришли в наш хук. Но можно и передать любые свои:

%hook SomeClass

- (id)initWithFrame:(CGRect)frame
{
    id result = %orig;
    // some custom code
    return result;
}

- (id)initWithName:(NSString *)name
{
    id result = %orig(@"customName");
    // some custom code
    return result;
}

%end

Если простые определения методов внутри хуков переопределяет уже имеющиеся, то для добавления новых методов можно использовать макрос %new. По сути, это разделитель между методами, которые мы подменяем, и методами, которые мы добавляем. ВСЕ методы, идущие после %new, будут именно добавлены. Пример:

%hook SomeClass

- (void)someOldMethod
{
    // some code here
}

%new

- (void)someNewMethod
{
    // some more code here
}

%end

Но с таким подходом мы не сможем вызвать наш новый метод из переопределённого: theos трактует ворнинги как ошибки и не даст собрать проект. Ведь мы наш метод не объявили! Но это поправимо, просто добавим вот это в наш файлик:

@interface SomeClass(NewMethods)
- (void)someNewMethod;
@end;

Springboard и взломанные устройства

  • Если программа была установлена на взломанном мобильном устройстве, она не может быть удалена обычным способом. Сделать это можно только через твик CyDelete, но чаще всего для этих целей используется Cydia.
  • Начиная с версии операционной системы 1.1.3, модификация приложения SpringBoard уже не требуется, поскольку jailbreak теперь официально поддерживает значки программ от сторонних разработчиков.
  • Все те программы, которые были установлены через Cydia, хранятся в Applications.
  • Если мы пользуемся тем мобильным устройством, на котором был осуществлён jailbreak, мы можем его усовершенствовать, используя скины и различные темы, скачанные нами.
  • Применить темы можно через WinterBoard (приложение, которое можно найти в Cydia). Добавим, что новая тема способна изменить любую из деталей интерфейса пользователя.
Читайте также:  Как изменить настройки DNS на iPhone и iPad - RuBookMac

Зачем нужен респринг и как его сделать?

В большинстве случаев он необходим для применения новых настроек и элементов дизайна (твиков из Cydia) — установки тем оформления, активации новых функций и т.д.

Произвести респринг устройства можно исключительно на iPhone или iPad с джейлбрейком. Соответствующая опция (кнопка) присутствует по умолчанию в настройках многих плагинов из Cydia, кроме того, существует ряд специальных твиков, добавляющих кнопку респринга в меню iOS (SBPowerAlerts, RePower, BetterPowerDown и т.д.). Также можно установить собственную команду для респринга устройства, воспользовавшись твиком Activator.

Итак, как отключить анимацию springboard — способ кустарный (автор — юзер с ником vista980622):

  • тапаем Настройки -> Основные -> Универсальный доступ, там в разделе «Взаимодействие» открываем и включаем AssistiveTouch, это универсальный помощник, который появляться во всех приложениях;
  • возвращаемся на домашний экран и появившуюся там иконку включения меню AssistiveTouch задвигаем в правый нижний его угол;
  • теперь начинаем методично, терпеливо и без остановок свайпать вниз-вверх, включая и выключая меню Spotlight и одновременно заставляя кнопку AssistiveTouch тоже перемещаться по экрану вслед за клавиатурой;
  • примерно после 20-го свайпа (а может после 5-го или после 30-го) операционная система вашего iPhone сама отключит анимацию SpringBoard.

Такой вот неожиданный, но полезный фокус. О том, что он удачно состоялся, вы увидите по изменившемуся поведению кнопки AssistiveTouch: после закрытия экранной клавиатуры она начнет падать вниз экрана не после «театральной» паузы, а моментально.

Способ вроде как работает на всех iPhone и iPad с IOS 9.2. Если вдруг на iPad работать не будет, то дополнительно следует отключить на девайсе жесты многозадачности (Настройки -> Общие -> Жесты многозадачности -> Выкл).

И в завершение напомним, что, во-первых, после отключения анимации SpringBoard можно не забыть вернуться в «Настройки» и выключить AssistiveTouch, а во-вторых, данный фокус iOS сохранять будет до первой перезагрузки (или выключения) iPhone, и если таковая случится, то потом всю описанную нами процедуру надо будет повторить снова.

Создание проекта и настройка theos


Начинаем: создаём пустую папку, в неё кидаем теос (я кинул в виде гитового сабмодуля).

Далее, создаём новый проект с помощью NIC:

iHabrTweak git:(master) theos/bin/nic.pl 
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/application
  [2.] iphone/library
  [3.] iphone/preference_bundle
  [4.] iphone/tool
  [5.] iphone/tweak
Choose a Template (required): 5
Project Name (required): iHabrTweak
Package Name [com.yourcompany.ihabrtweak]: com.silvansky.ihabr
Author/Maintainer Name [Valentine Silvansky]: silvansky
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: 
Instantiating iphone/tweak in ihabrtweak/...
Done.

Теперь у нас есть папка ihabrtweak, в которой и лежат нужные нам файлики.

iHabrTweak git:(master) ✗ cd ihabrtweak 
ihabrtweak git:(master) ✗ ls
Makefile Tweak.xm control iHabrTweak.plist theos


Теперь запускаем make и видим ошибки: не всё так просто! Наша система не до конца готова к испытанию на theos.

Читайте также:  ‎App Store: Film Movie Editor Movavi Clips

Что ж, надо вводить настройки, необходимые для нормальной сборки:

export ARCHS=armv7
export TARGET=iphone:latest:4.3
export THEOS="`pwd`/theos"
export SDKVERSION=6.0
export THEOS_DEVICE_IP=192.168.2.2

ARCHS

нам указывает, что собирать будем только для armv7, а на armv6 забьём.

TARGET

нам указывает, что собирать будем для iOS с использованием последнего (в системе) SDK и с совместимостью с версии 4.3. Остальные три самоочевидны.

ihabrtweak git:(master) ✗ make
Making all for tweak iHabrTweak...
 Preprocessing Tweak.xm...
 Compiling Tweak.xm...
 Linking tweak iHabrTweak...
 Stripping iHabrTweak...
 Signing iHabrTweak...
ihabrtweak git:(master) ✗ ls .theos/obj 
Tweak.xm.o iHabrTweak.dylib


Теперь у нас есть наша замечательная динамическая библиотека, которая пока совсем ничего не умеет делать! Зато мы можем установить наш твик на девайс:

ihabrtweak git:(master) ✗ make package
Making all for tweak iHabrTweak...
make[2]: Nothing to be done for `internal-library-compile'.
Making stage for tweak iHabrTweak...
dpkg-deb: building package `com.silvansky.ihabr' in `./com.silvansky.ihabr_0.0.1-1_iphoneos-arm.deb'.
ihabrtweak git:(master) ✗ make package install
Making all for tweak iHabrTweak...
make[2]: Nothing to be done for `internal-library-compile'.
Making stage for tweak iHabrTweak...
dpkg-deb: building package `com.silvansky.ihabr' in `./com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb'.
install.copyFile "./com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb" "com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb"
root@192.168.2.2's password: 
com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb 100% 1454 1.4KB/s 00:00    
install.exec "dpkg -i com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb"
root@192.168.2.2's password: 
Selecting previously deselected package com.silvansky.ihabr.
(Reading database ... 2516 files and directories currently installed.)
Unpacking com.silvansky.ihabr (from com.silvansky.ihabr_0.0.1-2_iphoneos-arm.deb) ...
Setting up com.silvansky.ihabr (0.0.1-2) ...
install.exec "timeout 10s sbreload || ( ( respring || killall -9 SpringBoard ) && launchctl load /System/Library/LaunchDaemons/com.apple.SpringBoard.plist )"
root@192.168.2.2's password: 
launchctl unload SpringBoard.plist
waiting for kill(29) != 0...

Собственно, твик готов! Ставится, но ничего не делает. Будем это править. Начнём с теории theos-а и его твиков.

Как вы уже заметили, в проекте у нас есть файл Tweak.xm, являющийся нашим главным исходником.

%hook и %end


Основа твиков в theos — хуки. Они основаны на богатейшем рантайме языка Objective-C, позволяющем подмену методов у произвольного класса. Собственно, используется это так:

%hook SomeClass

-(void)someMethod
{
     // some code goes here
}

%end

Здесь Мы внедряем (подменяем) метод «someMethod» у класса «SomeClass». К примеру, мы можем внедрять наш код в SpringBoard, например, можем добавлять свои вьюшки на экран блокировки.

Оцените статью
iPad Мобайл
Добавить комментарий