有没有一种有效的方法来更新iPad文件系统上文件的最后修改属性,即unix touch命令?
我看过NSFileManager,但没有运气.
我的项目中有两个框架,每个框架都依赖于同一个 Swift 包(在本例中为 RxSwift,但我认为这并不重要)。
为了构建项目,我必须在两个目标中包含相同的包(通过目标常规设置中的“框架和库”列表) - 否则当我尝试导入包时,它找不到它。
当我运行我的应用程序时,我在控制台中看到如下警告:
objc[79287]: Class _TtC9Alamofire18UploadTaskDelegate is implemented in both
/Users/deanWombourne/Desktop/PackageManagerTest/DerivedData/PackageManagerTest/
Build/Products/Debug-iphonesimulator/Framework1.framework/Framework1 (0x110877e00)
and
/Users/deanWombourne/Library/Developer/CoreSimulator/Devices/2319A320-1A01-4784-B85E-272FF0F999CB/
data/Containers/Bundle/Application/D40DE3EA-DD78-4241-B307-070CDAF8BFA1/PackageManagerTest.app/PackageManagerTest (0x10f9858c8).
One of the two will be used. Which one is undefined.
Run Code Online (Sandbox Code Playgroud)
有时,应用程序会在重复的包中崩溃。
我已经通过构建一个没有重复包问题的版本来测试该应用程序(将所有代码复制/粘贴到同一个目标!)然后它运行良好,所以这与重复包问题有关。
那么,我的问题是什么?
在 Xcode 中有什么方法可以指定一个包将包含在两个目标中,而不是将它复制两次到可执行文件中?
理想情况下,我想将它指定为某种动态库,这样它就不会被嵌入到可执行文件中,而是按需加载 - 但此时欢迎任何解决方案!
编辑
如果我只有一个框架,但它与主应用程序目标共享 RxSwift 包依赖项,我也会遇到此问题。
使用代码Ç?naralt? Café在文本中搜索文本时Ci
NSStringCompareOptions options =
NSCaseInsensitiveSearch |
NSDiacriticInsensitiveSearch |
NSWidthInsensitiveSearch;
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"tr"];
NSRange range = [haystack rangeOfString:needle
options:options
range:NSMakeRange(o, haystack.length)
locale:locale];
Run Code Online (Sandbox Code Playgroud)
我得到了range.location平等NSNotFound.
这与初始Ç上的变音符号无关,因为我得到了相同的结果,搜索alti唯一奇怪的字符是ı.我也得到一个有效的匹配搜索Cafe包含变音符号(é).
苹果文档提到这种情况作为locale参数的注释,我想我正在关注它们.虽然我猜我不是因为它不起作用.
如何搜索"i"以匹配"i"和"ı"?
我有这个Result枚举:
public enum Result<T> {
case success(T)
case failure(Error)
}
Run Code Online (Sandbox Code Playgroud)
并希望实施CustomStringConvertible,所以我做到了.(不要在这里戳洞,这个问题已被简化:):
extension Result: CustomStringConvertible {
public var description: String {
switch self {
case .success(let value as CustomStringConvertible):
return "Result.success(\(value.description))"
case .success(let value):
return "Result.success(\(value))"
case .failure(let error as CustomStringConvertible):
return "Result.failure(\(error.description))"
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Playground中运行它完全符合要求.但是,它在决赛中出错了r.description.(同样的运行时故障发生在我的应用程序中,所以它与在操场上无关.)
var r: Result<String> = .success("hello")
r.description
r = .failure(NSError(domain: "", code: 0, userInfo: nil))
r.description
struct MyError: Error { }
r = .failure(MyError())
r.description
Run Code Online (Sandbox Code Playgroud)
经过大量的讨论和设置代码后,我发现它是因为MyError没有实现CustomStringConvertible,所以交换机中的任何情况都不匹配.我认为这意味着从该方法返回垃圾.
那么,有谁知道为什么这个开关编译? …
我正在为iOS创建一个静态库,我正在尝试为它的单元测试获取代码覆盖率数据.我正在使用CoverStory来可视化生成的代码覆盖文件.
我得到了大多数测试的正确信息.
但是,任何验证应该抛出异常的测试都没有被标记为已测试.
例如,该方法
- (void)shouldThrow:(BOOL)throw {
if (throw)
@throw [NSException exception...];
NSLog(@"not thrown");
}
Run Code Online (Sandbox Code Playgroud)
经测试测试
- (void)testShouldThrow {
STAssertThrows( [myObject shouldThrow:YES], @"Should have thrown an exception");
STAssertNoThrow( [myObject shouldThrow:NO], @"Should not have thrown an exception");
}
Run Code Online (Sandbox Code Playgroud)
通过所有测试(即正确抛出异常).但是,代码覆盖率不会显示为100% - 带有@throwon 的行未标记为已测试.
有任何想法吗?
我有一个协议
protocol P { }
Run Code Online (Sandbox Code Playgroud)
它由枚举实现
enum E: P {
case a
case b
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
我希望能够接收实例P,并返回一个特定值,如果它是E(将来会有其他枚举/结构等实现P).
我试过这个:
extension P {
var value: String {
switch self {
case E.a: return "This is an E.a"
default: return "meh"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这不编译
error: Temp.playground:14:16: error: enum case 'a' is not a member of type 'Self'
case E.a: return "hello"
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
case is E.a: return "This is an E.a"
Run Code Online (Sandbox Code Playgroud)
这只是给出了这个错误:
error: Temp.playground:14:19: error: enum element 'a' is …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我正在尝试导出企业归档.
这通过Xcode的界面(的Xcode 9.3版本(9E145))的作品完美,但我想通过命令行(这样我就可以自动完成这一对我们的CI)来做到这一点.
我正在从Xcode内部导出相同的存档,所以我有理由相信存档本身已经正确创建.
我正在运行的命令是
xcodebuild "-exportArchive" "-archivePath" "archive.xcarchive" -exportPath . -exportOptionsPlist ./export_options.plist
Run Code Online (Sandbox Code Playgroud)
而export_options.plist的内容是
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false></false>
<key>method</key>
<string>enterprise</string>
<key>provisioningProfiles</key>
<dict>
<key>com.correct.app.identifier</key>
<string>XC iOS: com.correct.app.identifier</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Distribution: MYBRAND</string>
<key>teamID</key>
<string>ABCDEFGHI</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
2018-04-07 16:54:02.104 xcodebuild[67144:5293266] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/c4/t3_jplmx5qn7dkxx95rqv2qh0000gn/T/MyBrand_2018-04-07_16-54-02.095.xcdistributionlogs'.
2018-04-07 16:54:04.108 xcodebuild[67144:5293266] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fbf2ad5b240>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=( …Run Code Online (Sandbox Code Playgroud) 我试图在从静态库迁移到框架之后对应用程序启动进行分析.我们有30个左右的框架(fyi:cocoapods),所以我想检查它是否影响性能.团队中的轶事测试说它不是,但我也想要一些数字!
我添加了环境变量DYLD_PRINT_STATISTICS并DYLD_PRINT_LIBRARIES查看链接器正在做什么,但我得到的所有输出都来自DYLD_PRINT_LIBRARIES变量.我可以看到框架正确加载,但没有得到它们的统计信息.
我已经尝试重新启动设备以确保框架已经不在内存中但是没有帮助.
关于为什么我没有得到任何输出的任何其他建议DYLD_PRINT_STATISTICS?
我正在尝试在Swift中重新实现一个类,但遇到了问题.我的模式是有一个对象,它将协议中的方法转发给多个其他对象.
我有一个协议,看起来像:
@protocol AnalyticsProvider {
@optional
- (void)showHomePage;
- (void)selectedMenuItem:(NSString *)item;
// ...
// 100 or so more methods :sigh:
// ...
@end
Run Code Online (Sandbox Code Playgroud)
我的想法是,我可以调用showHomePage单例并将其转发给多个对象,每个对象都会使用该消息执行自己的操作.
我会在启动时配置单例,如下所示:
[AppAnalytics sharedAnalytics] setProviders:@[ myFlurryProvider, myOmnitureProvider] ];
Run Code Online (Sandbox Code Playgroud)
其中myFlurryProvider和myOmnitureProvider是AnalyticsProvider协议的真正实现者.然后在我的视图控制器中我会有这样的行:
[[AppAnalytics sharedAnalytics] showHomePage];
Run Code Online (Sandbox Code Playgroud)
例如,这应该将主页分析事件发送到Flurry和Adobe Omniture.这是有效的,因为AppAnalytics该类实现了AnalyticsProvider协议,但实际上并不包含任何方法的代码.
通过forwardInvocation:在AppAnalyticsI中实现可以将方法转发给每个提供者,即
- (void)forwardImplementation:(NSInvocation *invocation) {
for provider in providers
if ([provider respondsToSelector:invocation.selector])
[invocation performWithTarget:provider]
}
Run Code Online (Sandbox Code Playgroud)
通过不在我的AppAnalytics单例中实现任何方法,调用被自动传递forwardImplementation:为NSInvocation,但是因为AppAnalytics符合协议我在调用时获得编译器安全性.赢了.非常重要的是我不必在AppAnalytics中实际实现任何方法,因为它们有100个并且我不想要那么多重复的代码!
鉴于这NSInvocation是禁止的,在Swift中实现这个的好方法的任何想法!
当我尝试强制转换 WKNSURLRequest(和其他类,全部来自 WebKit 框架)时,我遇到了严重的崩溃。
例如在操场上:
import UIKit
import WebKit
final class Sigh: NSObject { }
NSClassFromString("NSObject") as? Sigh.Type
NSClassFromString("WKNSURLRequest") as? Sigh.Type
Run Code Online (Sandbox Code Playgroud)
NSObject 的nil强制转换有效(即返回),但 WKNSURLRequest 的强制转换因 EXC_BAD_ACCESS 而崩溃——我认为它也会返回nil。
任何人都知道可能导致这种情况的原因是什么?
ios ×5
swift ×5
objective-c ×4
xcode ×4
casting ×1
dyld ×1
ipad ×1
iphone ×1
localization ×1
nsstring ×1
rx-swift ×1
turkish ×1
unit-testing ×1
xcode9.3 ×1