Updating extensions for iOS 13: Difference between revisions

From iPhone Development Wiki
(→‎What has changed in iOS 13? (Classes, frameworks, etc.): Add a few little things from research)
mNo edit summary
Line 11: Line 11:
== SBRootIconListView ==
== SBRootIconListView ==


This class was removed entirely with iOS 13. Root Icon Lists are now instances of SBIconListView
This class was removed entirely with iOS 13. Root Icon Lists are now instances of <code>SBIconListView</code>.


== Home Screen Layout ==
== Home Screen Layout ==
Line 17: Line 17:
=== SBIconListFlowLayout ===  
=== SBIconListFlowLayout ===  


Layout handling in iOS 13 now uses SBIconListFlowLayouts. These are provided by an instance of SBHDefaultIconListLayoutProvider.
Layout handling in iOS 13 now uses <code>SBIconListFlowLayouts</code>. These are provided by an instance of <code>SBHDefaultIconListLayoutProvider</code>.


This alone handles row/column count. It also contains a SBIconListGridLayoutConfiguration, which controls the spacing and location of icons.
This alone handles row/column count. It also contains a <code>SBIconListGridLayoutConfiguration</code>, which controls the spacing and location of icons.


=== SBIconListGridLayoutConfiguration ===
=== SBIconListGridLayoutConfiguration ===
Line 25: Line 25:
This class contains several properties that can be modified to alter the layout.  
This class contains several properties that can be modified to alter the layout.  


Selectors of interest include <code>portraitLayoutInsets</code> and <code>landscapeLayoutInsets</code>. These return an instance of UIEdgeInsets that can be used to manipulate layout.  
Selectors of interest include <code>portraitLayoutInsets</code> and <code>landscapeLayoutInsets</code>. These return an instance of <code>UIEdgeInsets</code> that can be used to manipulate layout.  


== Generating an apps icon image ==
== Generating an apps icon image ==

Revision as of 06:03, 21 March 2020

Let's collect knowledge like we did with iOS 12, iOS 11, iOS 10, iOS 9, iOS 8 and iOS 7 – paste in your notes and share what you've learned, and somebody else will organize it later. :) If you want to ask questions and share tips over chat with other developers, see How to use IRC for how to connect to #theos and #iphonedev.

Hey developer, you can add your knowledge here! Yes, you! Make an account and edit this page!

If you want to see what's been recently updated on this page, you can use the wiki's history feature to compare the revisions (to look at the diff) since the last time you visited this page.

What has changed in iOS 13? (Classes, frameworks, etc.)

SBRootIconListView

This class was removed entirely with iOS 13. Root Icon Lists are now instances of SBIconListView.

Home Screen Layout

SBIconListFlowLayout

Layout handling in iOS 13 now uses SBIconListFlowLayouts. These are provided by an instance of SBHDefaultIconListLayoutProvider.

This alone handles row/column count. It also contains a SBIconListGridLayoutConfiguration, which controls the spacing and location of icons.

SBIconListGridLayoutConfiguration

This class contains several properties that can be modified to alter the layout.

Selectors of interest include portraitLayoutInsets and landscapeLayoutInsets. These return an instance of UIEdgeInsets that can be used to manipulate layout.

Generating an apps icon image

Previously an icon image could be generated from an icon object like so

SBIcon *icon = someIcon;
UIImage *iconImage = [icon generateIconImage:2];

In iOS 13 this method was changed to -generateIconImageWithInfo:(struct SBIconImageInfo)info

struct SBIconImageInfo {
    CGSize size;
    CGFloat scale;
    CGFloat continuousCornerRadius;
};
SBIconController *iconController = [NSClassFromString(@"SBIconController") sharedInstance];
SBIcon *icon = [iconController.model expectedIconForDisplayIdentifier:@"com.apple.Music"];

CGSize imageSize = CGSizeMake(60, 60);

struct SBIconImageInfo imageInfo;
imageInfo.size  = imageSize;
imageInfo.scale = [UIScreen mainScreen].scale;
imageInfo.continuousCornerRadius = 12;

UIImage *iconImage = [icon generateIconImageWithInfo:imageInfo];

UIDevice issue

[UIDevice currentDevice] may causes some process crashes when it called in %ctor

To reproduce that, add this to your tweak, then change your wallpaper via Settings. The device gets stuck and reboot.

%ctor {
   NSLog(@"[UIDevice currrentDevice] is %@", [UIDevice currentDevice]);
   %init;
}