My app creates dynamic copies of UI controls that are based on a custom UIButton subclass using this legacy approach:
let archivedButton = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
guard let buttonDuplicate = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(archivedButton) as? UIWagerButton else {return nil }
I am currently trying to work passed the deprecation of
NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data: Data)
Per the guidance, I should be replacing that line with the following and ensuring that the custom class implements NSSecureCoding
guard let buttonDuplicate = try NSKeyedUnarchiver.unarchivedObject(ofClass: UIWagerButton.self, from: archivedButton) else {return nil}
However, while the code does compile and run, decoding the data reference throws the following error:
value for key 'UIButtonStatefulContent' was of unexpected class 'NSMutableDictionary'
I can only assume that if I get passed this specific property, there will be other properties that are also problematic.
Question: Is this a bug? Or, am I now responsible for navigating the underlying property matrix of this UIControl to specifically, manually, handle the encoding and decoding of each of it's properties?
Frameworks
RSS for tagAsk questions about APIs that can drive features in your apps.
Posts under Frameworks tag
200 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
It's working well on iOS 17 simulator and device. but crashes on iOS 18 beta. It looks like it crashes on a UIviewcontroller page with a UIcollectionView.
For a few reasons, we as a team decided to transition away from the SwiftUI.App launch cycle. We need more control and customisation, and managing the scenes directly ourselves was the best way forward.
We're now trying to run the app entirely from our own App and Scene delegates, however we've run into a problem: When we update the app on a device from a version that uses SwiftUI.App to a version that uses App and Scene delegates, the first initial launch fails with a black screen.
The reason for this is that FrontBoardServices attempts to use the existing UISceneSession after the update, with the SwiftUI.AppSceneDelegate class, instead of calling application(configurationForConnecting:options:). Since SwiftUI.AppSceneDelegate still exists in the scope, the internal property _configurationNeedsReevaluation on UISceneSession returns false and the app attempts to launch from SwiftUI.AppSceneDelegate.
As far as I can tell, there doesn't seem to be a way to fix this that doesn't involve invoking the private method -[UISceneSession _updateConfiguration:] to force the configuration to use the correct Scene delegate.
if let sceneSession = application.openSessions.first(
where: { $0.configuration.delegateClass.map(NSStringFromClass) == "SwiftUI.AppSceneDelegate" }
) {
let newConfig = UISceneConfiguration(name: nil, sessionRole: .windowApplication)
newConfig.delegateClass = SceneDelegate.self
sceneSession.perform(Selector(("_updateConfiguration:")), with: newConfig)
}
Could you maybe advise on a way forwards?
Hello, apple!
I get a crash log in development. I check the package contents and find the file does exist in path ''/private/var/containers/Bundle/Application/8BD48BB3-FA58-498B-AE61-559D415D6F18/MyApp.app/Frameworks/MyFramework.framework/MyFramework''
Please help to check if this is our project issue or system issue. The content is:
Incident Identifier: 39F9567A-E204-4FC0-932E-078CB082C9D0
CrashReporter Key: 4fd7a4d1d72f1b6158af9d5d4ff15c85f6adc6f9
Hardware Model: iPhone13,4
Process: WidgetExtension [1259]
Path: /private/var/root/Library/Caches/com.apple.containermanagerd/System/Dead/temp.aEu43U/655B4729-5B26-4E43-A0DF-BAB6E8D03E83/MyApp.app/PlugIns/WidgetExtension.appex/WidgetExtension
Identifier: WidgetExtension
Version: ???
Code Type: ARM-64 (Native)
Role: Unspecified
Parent Process: launchd [1]
Coalition: bundleId [1033]
Date/Time: 2024-08-16 15:48:56.1150 +0800
Launch Time: 2024-08-16 15:48:56.0226 +0800
OS Version: iPhone OS 17.5 (21F5073b)
Release Type: Beta
Baseband Version: 4.50.06
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: DYLD 1 Library missing
Library not loaded: @rpath/MyFramework.framework/MyFramework
Referenced from: <14B7FD51-C300-3B5E-8A13-4C681DE0B359> /Volumes/VOLUME/*/MyApp.app/PlugIns/WidgetExtension.appex/WidgetExtension
Reason: tried: '/usr/lib/swift/MyFramework.framework/MyFramework' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/MyFramework.framework/MyFramework' (no such file), '/private/var/containers/Bundle/Application/8BD48BB3-FA58-498B-AE61-559D415D6F18/MyApp.app/PlugIns/WidgetExtension.appex/Frameworks/MyFramework.framework/MyFramework' (no such file), '/private/var/containers/Bundle/Application/8BD48BB3-FA58-498B-AE61-559D415D6F18/MyApp.app/PlugIns/WidgetExtension.appex/Frameworks/MyFramework.framework/MyFramework' (no such file), '/private/var/containers/Bundle/Application/8BD48BB3-FA58-498B-AE61-559D415D6F18/MyApp.app/Frameworks/MyFramework.framework/MyFramework' (no such file), '/usr/lib/swift/MyFramework.framework/MyFramework' (no such file, not in dyld cache),
(terminated at launch; ignore backtrace)
Triggered by Thread: 0
Thread 0 Crashed:
0 dyld 0x1b3d49cd8 __abort_with_payload + 8
1 dyld 0x1b3d55450 abort_with_payload_wrapper_internal + 104
2 dyld 0x1b3d55484 abort_with_payload + 16
3 dyld 0x1b3ce2e00 dyld4::halt(char const*, dyld4::StructuredError const*) + 304
4 dyld 0x1b3cf059c dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 4088
5 dyld 0x1b3d14c48 start + 1724
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000006 x1: 0x0000000000000001 x2: 0x000000016bceac50 x3: 0x00000000000000c8
x4: 0x000000016bcea850 x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x0000000000000ff0
x8: 0x0000000000000020 x9: 0x000000016bcea7c6 x10: 0x000000000000000a x11: 0x0000000000000000
x12: 0x0000000000000031 x13: 0x1000000000000000 x14: 0x0000000000000004 x15: 0x0000000000008000
x16: 0x0000000000000209 x17: 0x00000001b3ce1884 x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x000000016bcea850 x21: 0x00000000000000c8 x22: 0x000000016bceac50 x23: 0x0000000000000001
x24: 0x0000000000000006 x25: 0x000000016bceb720 x26: 0x000000016bceb6c8 x27: 0x000000016bceb660
x28: 0x000000016bceb5d8 fp: 0x000000016bcea820 lr: 0x00000001b3d55450
sp: 0x000000016bcea7e0 pc: 0x00000001b3d49cd8 cpsr: 0x80001000
far: 0x0000000000000000 esr: 0x56000080 Address size fault
Binary Images:
0x104114000 - 0x10411bfff WidgetExtension arm64 <14b7fd51c3003b5e8a134c681de0b359> /private/var/containers/Bundle/Application/8BD48BB3-FA58-498B-AE61-559D415D6F18/MyApp.app/PlugIns/WidgetExtension.appex/WidgetExtension
0x1b3cd8000 - 0x1b3d64ef7 dyld arm64e <da3896ecbf5234efb392a744373c3faa> /usr/lib/dyld
0x0 - 0xffffffffffffffff ??? unknown-arch <00000000000000000000000000000000> ???
I am trying to establish a connection using NetworkExtension and NEVPNProtocolIKEv2. It needs to work on an iOS device. I have a test.mobileconfig file and I have set up all configurations based on its content. However, I am unsure how to assign the value for identityData. I have tried multiple methods, but each time, I receive the following errors on my server:
"ikev2-cp"[200] "my_ip_address" #1387: Peer attempted EAP authentication, but IKE_AUTH is required
"ikev2-cp"[200] "my_ip_address" #1387: responding to IKE_AUTH message (ID 1) from "my_ip_address" with encrypted notification AUTHENTICATION_FAILED
"ikev2-cp"[200] "my_ip_address" #1387: encountered fatal error in state STATE_V2_PARENT_R1
First of all, I used the first PayloadContent value inside the .mobileconfig file that I tested. I should mention that there is a certificate inside the file. However, the certificate is not password-protected.
func getIKEv2Protocol(address: NSString, username: NSString, password: NSString) -> NEVPNProtocolIPSec {
let p = NEVPNProtocolIKEv2()
let kcs = KeychainService()
p.certificateType = .RSA
p.authenticationMethod = .certificate
kcs.save(key: "ikev2_password", value: password as String)
p.passwordReference = kcs.load(key: "ikev2_password")
p.identityDataPassword = "cHH....B3"
p.ikeSecurityAssociationParameters.encryptionAlgorithm = .algorithmAES256GCM
p.ikeSecurityAssociationParameters.integrityAlgorithm = .SHA256
p.ikeSecurityAssociationParameters.diffieHellmanGroup = .group19
p.ikeSecurityAssociationParameters.lifetimeMinutes = 1410
p.childSecurityAssociationParameters.encryptionAlgorithm = .algorithmAES256GCM
p.childSecurityAssociationParameters.integrityAlgorithm = .SHA256
p.childSecurityAssociationParameters.diffieHellmanGroup = .group19
p.childSecurityAssociationParameters.lifetimeMinutes = 1410
if let certData = Data(base64Encoded: base64String) {
p.identityData = certData
p.authenticationMethod = .certificate
}
p.serverCertificateIssuerCommonName = "***"
p.serverCertificateCommonName = "***-2"
p.deadPeerDetectionRate = .medium
p.disableRedirect = true
p.enableRevocationCheck = false
p.useExtendedAuthentication = true
p.remoteIdentifier = address as String
p.localIdentifier = username as String
p.serverAddress = address as String
p.enablePFS = false
return p;
}
and
let vpnManager = NEVPNManager.shared()
// inside > vpnManager.loadFromPreferences { (error) -> Void in
let p = self.getIKEv2Protocol(address: address, username: username, password: password)
vpnManager.protocolConfiguration = p
vpnManager.localizedDescription = "IKEv2 VPN"
vpnManager.isEnabled = true
vpnManager.saveToPreferences(completionHandler: { (error) -> Void in
...
vpnManager.loadFromPreferences(completionHandler: { error in
...
try vpnManager.connection.startVPNTunnel()
// And this section starts without any errors.
How can I properly provide the value for p.identityData and .mobileconfig password?
Please explain in detail if there is an answer, as I am inexperienced with Swift and VPNs.
I am writing to report an issue I encountered with iOS 18 beta that affects my application, which has been available on the App Store for over two years and currently has over 60,000 active users.
My application utilizes a UITabBarController to manage multiple tabs, where each tab hosts a UIViewController embedded within a UINavigationController. The application operates in two different states, where users may have either 5, 4, or 3 tabBarItems depending on their configuration.
The issue arises when fewer than 5 tabs are present. In these cases, I add child view controllers to the UITabBarController to ensure they are displayed above the tab bar, rather than below it. The relevant code snippet is as follows:
tabBarController.addChild(childController)
tabBarController.view.addSubview(childController.view)
Prior to iOS 18, this implementation functioned as expected. However, with the release of iOS 18, adding a child view controller to the UITabBarController results in the child being incorrectly added as a UITabBarItem. This misbehavior leads to an application crash when the unintended tab is selected.
The crash trace is as follows:
"Inconsistency in UITabBar items and view controllers detected. No view controller matches the UITabBarItem '<UITabBarItem: 0x142d9c480> selected'."
I have attached screenshots from iOS 18 and previous versions to illustrate the issue, which compares the expected behavior in earlier iOS versions with the problematic behavior in iOS 18.
I appreciate your attention to this matter and look forward to any guidance or resolution you can provide.
Hi Team,
I'm currently facing an issue with my project. I’m able to build and run the app without any problems, but I encounter an error when attempting to archive the build for TestFlight.
The error preventing archiving is as follows:
....Pods/Target Support Files/xxxxxProjectNamexxxx/Pods-xxxxxProjectNamexxxx-frameworks.sh: line 132: ARCHS[@]: unbound variable
Command PhaseScriptExecution failed with a nonzero exit code
Could you please guide me in the right direction to resolve this issue? If a screen-sharing session is necessary, I’d be happy to arrange one to ensure we can push the build to TestFlight as soon as possible.
Thank you for your assistance.
Best regards,
Vignesh k s
I want to on widget or on app I can trigger MPRemoteCommandEvent to control system media player.
I've noticed an increase in the number of crashes reported in our app since the release of iOS 17.4. According to the logs, the crash seems to be occurring within the iOS core, specifically at [UINavigationBar layoutSubviews]. Unfortunately, I haven't been able to reproduce the crash on my end. I've attached a screenshot of the crash log for your reference.
I'm writing software that uses the security framework to get signing information from applications. I noticed that over time memory consumption goes up. After checking with Instruments, I saw an accumulation of objects coming from the internals of the security framework. These allocated objects don't seem to go away.
Following is a standalone code sample that seems to cause the problem in my env. Running it by itself creates a big number of objects that are not released. I also attached a screenshot from Instruments.
#include <Foundation/Foundation.h>
#include <Security/Security.h>
#include <unistd.h>
OSStatus get_signing_info(const char* path)
{
SecStaticCodeRef codeRef = NULL;
OSStatus status;
NSString* str = [NSString stringWithUTF8String:path];
NSURL* url = [NSURL fileURLWithPath:str];
status = SecStaticCodeCreateWithPath((__bridge CFURLRef)url, kSecCSDefaultFlags, &codeRef);
CFDictionaryRef _info = NULL;
status = SecCodeCopySigningInformation(codeRef, kSecCSSigningInformation, &_info);
NSDictionary* info = (__bridge_transfer NSDictionary *)_info;
int flags = [[info objectForKey:(NSString *)kSecCodeInfoFlags] intValue];
NSLog(@"%d", flags);
CFRelease(codeRef);
return status;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
for (int i = 0; i < 1000; ++i) {
@autoreleasepool {
OSStatus status = get_signing_info(argv[1]);
NSLog(@"i=%d, status=%d", i, status);
}
}
sleep(100);
}
return 0;
}
Is there a way to get rid of these objects that clog up the memory? Or perhaps use the framework differently to avoid this issue?
Tab bars on iPadOS 18 have moved to the top of the screen. They now share space with navigation bars.
We have added calls to setTabBarHidden(_:animated:) alongside existing calls to setNavigationBarHidden(_:animated:) in pushed view controller's viewWillAppear(_:) methods to manage the appearance of the tab bar and navigation bar within navigation controllers.
This results in layout issues with the safe area and navigation bar. I've attached screenshots from an example app demonstrating the issue. How can we manage the appearance of both the navigation bar and tab bar so that they share the same space when visible, but are properly hidden and excluded from the safe area when not?
/// The root view controller shows both the navigation bar and tab bar
class ViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
tabBarController?.setTabBarHidden(false, animated: animated)
}
}
/// The second view controller hides both the navigation bar and tab bar
class ViewController2: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
tabBarController?.setTabBarHidden(true, animated: animated)
}
@IBAction func customBackButtonTapped(_ sender: Any) {
navigationController?.popViewController(animated: true)
}
}
/// The third view controller shows the navigation bar but hides the tab bar
class ViewController3: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
tabBarController?.setTabBarHidden(true, animated: animated)
}
}
When building my iOS framework, I encountered a (fatal) module 'TrustKit' not found issue. I've marked the necessary classes as public (which is inherited from other library classes) for client applications, but I'm unsure how to resolve this error.
Example Code Snippet
import Foundation
import TrustKit
@objc
public class InheritanceTruskitFrameworkProjectClass: TrustKit {
func extraFunctionality() {
print("extraFunctionality executing...")
}
}
Error while building the framework in the auto-generated Swift header file (ProjectName-Swift.h)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import TrustKit; # -> error here `(fatal) module 'TrustKit' not found`
#endif
#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
Please check this image to understand the error
Sample GitHub project https://github.com/vinaykumar0339/InheritanceTruskitFrameworkProject
I want a way to use inheritance for the dependencies project. Is this supported?
Looks Like it won't work with any modules like cocopod frameworks, internal module map etc?
What I have Tried
I have tried to install TrustKit with SPM also the same error throwing (fatal) module 'TrustKit' not found
The following exceptions occur when I try to archive a version of this app. It runs fine in DEBUG - ive bashed my head through all github forums and stack overflow posts trying all fixes:
deleting the duplicate pods in xcode - cause a hermes error which then fails ALL builds
the following all show the same symptoms (same error ONLY in an archive build)
adjusting pod file to eliminate duplicates
inserting a script in build phases
have checked info.plist, project.pbxproj and other key files
HELP... i need to get this published 4 weeks ago
Prepare build
error: Multiple commands produce '/Users/Library/Developer/Xcode/DerivedData/WildtrackProReact-ccekvzdhkorxtrauputwcraqedhf/Build/Intermediates.noindex/ArchiveIntermediates/WildtrackProReact/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RCTI18nStrings.bundle'
note: Target 'React-Core-c704a495-RCTI18nStrings' (project 'Pods') has create directory command with output '/Users/Library/Developer/Xcode/DerivedData/WildtrackProReact-ccekvzdhkorxtrauputwcraqedhf/Build/Intermediates.noindex/ArchiveIntermediates/WildtrackProReact/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RCTI18nStrings.bundle'
note: Target 'React-Core.common-RCTI18nStrings' (project 'Pods') has create directory command with output '/Users/Library/Developer/Xcode/DerivedData/WildtrackProReact-ccekvzdhkorxtrauputwcraqedhf/Build/Intermediates.noindex/ArchiveIntermediates/WildtrackProReact/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RCTI18nStrings.bundle'
Multiple commands produce '/Users/Library/Developer/Xcode/DerivedData/WildtrackProReact-ccekvzdhkorxtrauputwcraqedhf/Build/Intermediates.noindex/ArchiveIntermediates/WildtrackProReact/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/RCTI18nStrings.bundle'
I've built a universal xcframework for iOS (arm64) and iOS simulator (arch64, x86_64). This framework has a set of third party dependencies that were provided by a company I'm working with to use their SDK. They provided two sets of .framework files:
The first, for iOS simulator (arch64, x86_64)
The second for iOS (arm64).
Following Apple's [documentation for xcframeworks].
(https://developer.apple.com/documentation/xcode/creating-a-multi-platform-binary-framework-bundle) I created two archives of my project, one for each platform/architecture combination with each set of framework files. I successfully built the xcframework and was able to use it for both iOS and simulator in a test project.
However, when trying to deploy this project to testflight, I get an error telling me that nested bundles aren't allowed:
"Invalid Bundle. The bundle at ... contains disallowed nested bundles"
If I look at the xcframework folder structure, I see two folders within for each architecture/platform build, each with the dependency frameworks inside. This makes sense to me, because we would need each framework at a different time depending on where we are running the project. But, apple says this isn't allowed. My questions are as follows:
How can I make this universal framework with 3rd party dependencies work without creating a nested bundle?
Is this even possible?
Do I need to ask the company that made the dependency framework to give me a universal xcframework?
I work on an SDK, and one of the ways we distribute it is as a pre-compiled static XCFramework.
As far as I know, it’s the nature of a static framework to not contain symbols since the framework will be embedded in the final app binary, and the symbols should then be generated.
However, when testing the "Validate" function of the Xcode 16 deployment process, our users are receiving a warning that says the framework does not contain symbols.
Is my assumption about static frameworks and symbols incorrect? Could this be a bug in Xcode 16? Should we modify something in our framework to inform Xcode that symbols are not needed?
In iOS 18 beta 5 version, setting the conversion to NSAttributedString using [.documentType: NSAttributedString.DocumentType.html] occasionally causes crashes.
The same issue was encountered in previous versions. However, after running the code on the main thread, it no longer crashed. But after upgrading to the iOS 18 beta 5 version, it occasionally crashes even when running on the main thread.
How can this issue be resolved?
thx~
I've been using the iODBC framework (https://sourceforge.net/projects/iodbc/files/iodbc/3.52.16/iODBC-SDK-3.52.16-macOS11.dmg/download) for some time in a few Xcode Objective-C projects. Older projects work. Recent new projects fail to compile, with the following error:
/Library/Frameworks/iODBC.framework/Headers/sqltypes.h:220:24 Typedef redefinition with different types ('unsigned long' vs 'UInt32' (aka 'unsigned int'))
The definition in question, from iODBC/sqltypes.h, is:
typedef unsigned long ULONG;
The previous definition, from CoreFoundation/CFPluginCOM.h is:
typedef UInt32 ULONG;
Older projects open, compile and run normally in Xcode 15 and earlier. Only new projects created with Xcode 14 or 15 exhibit this behavior.
CoreFondation/CFPluginCOM.h appears to provide non-essential Component Object Model (COM) support for Win32 apps. The definition of ULONG as UInt32 looks odd considering that CFPluginCOM seems to be aimed at 32-bit architecture.
I find no way to mitigate this conflict within the Xcode project. Is there some way to exclude CFPluginCOM.h, which appears non-essential, from my project?
I want my app to allow the user to search for certain words in a video file and the transcript of that video. I found a Transcript class. I don't remember which Framework it is in. Would someone point me in the right direction? What Framework and Classes should I use.
This bites me a lot. I'm looking at the documentation for, say, UNUserNotificationCenter.
And NOWHWERE but NOWHERE do I see anything that says, "hey, on platform *** you should import YYY to use this class."
Am I just not looking in the right place in Apple documentation to find this?
Surely, somewhere at the top level of documentation, it must tell you want the proper package to import is, per platform?
I am working on integrating widget support into an existing app and have a question regarding the best practices for reloading a widget. For context, the existing app allows the user to add a playlist widget which will show the title, track count, and thumbnail associated with that playlist.
Within the app, playlists can of course be edited which will change the data that should be reflected on the widget. In addition, edits may happen over and over, in quick succession (ex. deleting multiple tracks, reordering tracks, etc).
My question is as follows: should the widget be reloaded every time an edit is made, or is there a way to mark a widget as needing to be reloaded?
Considering the use case where a user is editing a playlist and makes 10-20 changes in quick succession, it feels wasteful to reload a widget 10-20 times for each small change. However, the app doesn't necessarily know when the user is going to stop editing or terminate the app, so it's important that the widget is reloaded rather proactively.
In addition to the above question, is there any way to only reload a specific, single widget, rather than all widgets or all widgets of a certain kind?
Considering the use case where a user may have 3-4 playlist widgets on their homescreen, it also feels wasteful to reload all of them when only one of the playlists may have been edited. Yet, from my understanding of WidgetCenter, the only two functions for reloading a widget are reloadAllTimelines and reloadTimelines(ofKind:) which seem to only allow broad reloading.