小编Ken*_*and的帖子

Xcode 9,我的NSLog()在哪里?未在Xcode控制台或Console.app中显示

我正在尝试在应用程序上进行一些基本的日志记录.我把一些NSLog()s 扔进了我的代码,但是没有任何东西被打印到下面的Xcode控制台.字面上没什么,甚至没有应用程序启动时的一些启动信息等.

我已经将我的Xcode控制台设置为显示,All Output并且我已经打开了变量检查器和控制台:

在此输入图像描述

在此输入图像描述

我听说过Logging更改,并且引入了一个新的Console.app,它可以让我查看模拟器上的日志,所以我想也许日志会显示在那里,但是当我这样做时会发生很多系统消息我没有看到我正在制作的NSLog().

我错过了什么吗?我需要翻新一个新设置吗?我在哪里可以看到我的NSLog()?

编辑:

我是用iOS 11模拟器做的,没有控制台输出.当我切换到iOS 9模拟器时,我得到了所有的控制台输出.

xcode nslog ios

12
推荐指数
1
解决办法
5905
查看次数

重复符号:在静态库B中包含静态库A,在XCode项目中也包含库A和B.

我一直在尝试为应用程序开发构建一组可重用的库,但我开始遇到问题.

我的一个静态库是一组通用方法(Objective-C Foundation类的类别,以提高它们的可用性),我倾向于在每个项目中使用它们.(我们称之为Lib A ...即XCode项目A生成libProjectA.a)

然后我有其他静态库,包含数学专用代码的东西等(我们称之为Lib B.)Lib B链接到Lib A,因为它需要使用一些通用功能.(即XCode项目B与libProjectA.a链接并生成libProjectB.a)

在我的XCode项目中,我希望包含并依赖于Lib A,因为它具有我一直使用的一般用途.我还想包含并依赖Lib B,因为我需要专门的数学功能.(即我的应用程序Project想要与libProjectA.a和libProjectB.a链接)

但是,当我尝试构建我的XCode项目时,我得到重复符号的错误,因为Lib A中定义的符号也在Lib B中定义.

ld: duplicate symbol _OBJC_METACLASS_$_Foo in /Users/kenny/xcode_build/Release-iphonesimulator/lib_ApplicationCore.a(Foo.o) and /Users/kenny/xcode_build/Release-iphonesimulator/lib_SpecializedMath.a(Foo.o)
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我想开发可重用的库来加速我的应用程序开发,并通过经过测试/改进的代码来提高稳定性.我是从错误的角度来看待这个吗?我正在为iOS开发,所以我不能使用dylib,它们必须是静态的.

如果我们的项目彼此相互依赖并避免重复的符号,我如何将这些库包含在我的项目中?

xcode objective-c static-libraries reusability ios

11
推荐指数
1
解决办法
3812
查看次数

将旧CoreData模型导入新项目

我有一个旧的Xcode项目,其中包含一个CoreData模型(包含模型的版本1和版本2).由于几个原因,我需要创建一个新的Xcode项目并将所有代码传输到新项目.

如何导入/转移我的旧CoreData模型,使这个新的二进制文件仍然能够读取并可能迁移现有用户的iPhone和iPad上的现有CoreData存储?我担心如果我使用这个新项目推送新版本,我的用户会将他们的应用程序更新到最新版本,然后它会崩溃,因为模型或模型版本号不匹配.

我不是在谈论在同一个应用程序中为数据模型添加新版本.我明白这个过程.这是关于将现有数据模型从旧项目移动/导入/等到新项目.

我应该只是复制文件并手动将它们添加到我的项目中吗?我是否需要更改构建设置中的内容才能解决问题?

xcode core-data ios

11
推荐指数
1
解决办法
6289
查看次数

Google Play 报告不支持的 API 但它在 AppCompat 中

我将一个新的应用程序包上传到 Google Play 进行测试,我今天早上检查了发布前报告,该报告抱怨说我使用了我不应该使用的灰名单私有 API……但是这些 API 正在被使用v7 AppCompat 库,而不是我。

那么,我该怎么办呢?

StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
    at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
    at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
    at java.lang.Class.getDeclaredMethodInternal(Native Method)
    at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
    at java.lang.Class.getMethod(Class.java:2063)
    at java.lang.Class.getMethod(Class.java:1690)
    at android.support.v7.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:84)
    at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:685)
    at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
    at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:466)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at com.inadaydevelopment.wordventure.NavControllerActivity_.setContentView(NavControllerActivity_.java:55)
    at com.inadaydevelopment.wordventure.NavControllerActivity.onCreate(NavControllerActivity.java:59)
    at com.inadaydevelopment.wordventure.NavControllerActivity_.onCreate(NavControllerActivity_.java:39)
    at android.app.Activity.performCreate(Activity.java:7144)
    at android.app.Activity.performCreate(Activity.java:7135)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:184)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Android …

android android-appcompat google-play

11
推荐指数
1
解决办法
2176
查看次数

_PFObjectIDFastHash64 崩溃 EXC_BAD_ACCESS KERN_INVALID_ADDRESS

我不断通过 Crashlytics 收到有关此崩溃的报告,但我不知道如何找出问题所在,因为堆栈跟踪不会在任何地方触及我的代码。我能做什么?如何找到问题的根源?

EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000004
Crashed: com.apple.root.user-initiated-qos
0  CoreData                       0x1b85a87ac _PFObjectIDFastHash64 + 40
1  CoreFoundation                 0x1b254e4f8 __CFBasicHashRehash + 992
2  CoreFoundation                 0x1b2552414 CFBasicHashRemoveValue + 2384
3  CoreFoundation                 0x1b2469ec0 CFDictionaryRemoveValue + 236
4  CoreData                       0x1b84f51c0 -[NSManagedObjectContext(_NSInternalAdditions) _forgetObject:propagateToObjectStore:removeFromRegistry:] + 124
5  CoreData                       0x1b84d46ec -[_PFManagedObjectReferenceQueue _processReferenceQueue:] + 860
6  CoreData                       0x1b85a0734 -[_PFAutoreleasePoolThunk dealloc] + 48
7  libobjc.A.dylib                0x1c65bb81c AutoreleasePoolPage::releaseUntil(objc_object**) + 204
8  libobjc.A.dylib                0x1c65bb6e8 objc_autoreleasePoolPop + 212
9  libdispatch.dylib              0x1b2120aa4 _dispatch_last_resort_autorelease_pool_pop + 44
10 libdispatch.dylib              0x1b21313c8 _dispatch_root_queue_drain + 1064
11 libdispatch.dylib              0x1b21318e8 …
Run Code Online (Sandbox Code Playgroud)

core-data ios crashlytics

11
推荐指数
1
解决办法
1137
查看次数

在Interface Builder中的iPad xib中明确使用@ 2x图像

我的项目中有2组图像,一组用于旧显示,一组用于视网膜显示.我正在开发iPad xibs(它是一个通用的应用程序),而@ 2x的双倍大小的图像实际上对ipad来说效果很好.如果image.png宽度为300像素,则image@2x.png宽度为600像素,因此在768宽的iPad屏幕上可以正常工作.当我在我的iPad xib中放置UIImageView时,我尝试将Image Name设置为显式为image@2x.png,但是我得到了?? 图像,这意味着Interface Builder不知道它是什么.

当我启动模拟器时,它实际上显示了@ 2x图像,因此它在技术上有效,但是Interface Builder不会正确显示它,这使得创建布局变得困难.

有没有办法让Interface Builder在我制作iPad xib时向我展示@ 2x图像?

iphone interface-builder ipad ios retina-display

10
推荐指数
1
解决办法
3290
查看次数

一个项目中不同目标的不同Default.png文件

我正在尝试在我的项目中设置第二个目标,但是当我将Default*.png文件拖到目标的Launch Images部分时,它告诉我将从原始目标覆盖Default.png.

我们如何为不同的目标添加不同的启动图像?

在你回答之前,请理解我不是在寻找如何在不同的目标中包含不同的一般文件或图像.据我所知,当我将它们拖到目标窗格的Launch Images部分时,我专门处理有关Default.png启动图像的问题.

ios xcode4

9
推荐指数
1
解决办法
2120
查看次数

比较器<String>必须覆盖超类方法

我正在制作TreeMap<String, String>并希望以降序的方式订购它.我创建了以下比较器:

Comparator<String> descender = new Comparator<String>() {

    @Override
    public int compare(String o1, String o2) {
        return o2.compareTo(o1);
    }
};
Run Code Online (Sandbox Code Playgroud)

我像这样构造TreeMap:

myMap = new TreeMap<String, String>(descender);

但是,我收到以下错误:

The method compare(String, String) of type new Comparator<String>(){} must override a superclass method
Run Code Online (Sandbox Code Playgroud)

我从未完全弄清楚仿制药,我做错了什么?

java generics map treemap comparator

9
推荐指数
2
解决办法
1万
查看次数

在localhost上的Google App Engine上"找不到系统CA捆绑包"

我正在开发一款应用程序,我将在Google App Engine(GAE)中运行,该应用程序需要访问GDrive API.当它在云中运行时,我可以使用我的特殊域范围授权,以便我的用户自动进行身份验证,我可以毫无问题地使用gdrive api.这非常有效.

但是,在localhost上进行测试时,域范围的身份验证将无效,因为我们localhost实际上并未对您的Google帐户进行身份验证,您只能声称自己是您想要的任何人.所以,我正在做的是$client在localhost和GAE中以不同方式实例化我的谷歌.在GAE中,我在localhost上使用特殊的域范围auth,然后我使用传统的Google Client配置,其中包含客户端ID,客户端密钥,oauth令牌处理等.

我重定向到Google,我告诉Google允许访问,然后Google将我重定向回localhost以完成oauth进程.当我code从谷歌和电话:

$client->authenticate($authcode);
Run Code Online (Sandbox Code Playgroud)

我收到有关缺少CA捆绑包的SSL错误.

在任何公共系统位置都找不到系统CA包.早于5.6的PHP版本未正确配置为默认使用系统的CA捆绑包.为了验证对等证书,您需要将磁盘上的路径提供给"验证"请求选项的证书包:http: //docs.guzzlephp.org/en/latest/clients.html#verify.如果您不需要特定的证书包,那么Mozilla提供了一个常用的CA包,可以在这里下载(由cURL的维护者提供):https: //raw.githubusercontent.com/bagder/ca-bundle/master/ ca-bundle.crt.在磁盘上有可用的CA捆绑包之后,可以将'openssl.cafile'PHP ini设置设置为指向文件的路径,从而省略'verify'请求选项.有关更多信息,请参见 http://curl.haxx.se/docs/sslcerts.html.

我已经下载了.crt文件,我也尝试下载他们的.pem文件,我尝试以几种方式配置我的php.ini以使其使用这些文件...

openssl.cafile="/path/to/ca-bundle.crt"
Run Code Online (Sandbox Code Playgroud)

要么

openssl.cafile="/path/to/cacert.pem"
Run Code Online (Sandbox Code Playgroud)

要么

curl.cainfo="/path/to/ca-bundle.crt"
Run Code Online (Sandbox Code Playgroud)

要么

curl.cainfo="/path/to/cacert.pem"
Run Code Online (Sandbox Code Playgroud)

但它们似乎都不起作用或有所作为.我错过了什么?

编辑:

告诉我在生产和本地主机上验证相同意味着你不明白我在问什么或者我需要使用客户端的原因.我的问题是关于证书.

php ssl google-app-engine curl

9
推荐指数
1
解决办法
1939
查看次数

在Android Instrumentation jUnit测试中访问R.raw资源

我正在尝试在Android Studio中制作一些Android Instrumentation类,以便我可以测试我的ormlite类.DBHelperormlite 的类需要从ormlite配置文件中读取,该文件位于我的res/raw/ormlite_config.txt并使用R.raw.ormlite_config.

这不是我openRawResource(R.raw.ormlite_config)用来获取的东西,因为DBHelper的超类的构造函数需要int资源.

当我运行我的测试时,它找不到它:

android.content.res.Resources$NotFoundException: Resource ID #0x7f090001

这是完整的堆栈跟踪:

android.content.res.Resources$NotFoundException: Resource ID #0x7f090001
at android.content.res.Resources.getValue(Resources.java:1266)
at android.content.res.Resources.openRawResource(Resources.java:1181)
at android.content.res.Resources.openRawResource(Resources.java:1158)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.openFileId(OrmLiteSqliteOpenHelper.java:310)
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.<init>(OrmLiteSqliteOpenHelper.java:76)
at com.inadaydevelopment.herdboss.DB.<init>(DB.java:40)
at com.inadaydevelopment.herdboss.DB.shared(DB.java:31)
at com.inadaydevelopment.herdboss.ORMLiteTest.setup(ORMLiteTest.java:29)
...
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853)

Tests ran to completion.
Run Code Online (Sandbox Code Playgroud)

DBHelper:

public class DBHelper extends OrmLiteSqliteOpenHelper {
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的jUnit测试用例:

@RunWith(AndroidJUnit4.class)
public class ORMLiteTest {
    @Before
    public void setup() {
        DB.shared(InstrumentationRegistry.getContext()); …
Run Code Online (Sandbox Code Playgroud)

junit android android-resources

9
推荐指数
1
解决办法
1005
查看次数